2016-03-02 492 views
1

有什麼辦法可以根據參數生成uuid嗎? 我有3個參數的類型:日期,Int & Int 我想根據他們三個生成UUID,這樣每次相同的3我會得到相同的UUID。根據給定的參數生成UUID?

+0

你爲什麼不簡單地把它們散列在一起?每次UUID生成時通常都是隨機的。 – hasumedic

+0

有沒有辦法根據散列值創建uuid? –

回答

1

甲UUID具有128位,因此,如果你在談論一個java.util.Date,其存儲一個64位的時間戳(Long),和兩個32位Int s,則您可以使一個唯一的UUID的每個組合。

java.util.UUID有一個構造函數,它接受兩個Long s(64位)。 Date可以是其中之一,並且兩個32位的Int可以通過將第一個31位向左移位(1位用於符號)並將第二個位移位來合併成一個。

import java.util.{ Date, UUID } 

def generate(date: Date, a: Int, b: Int): UUID = 
    new UUID(date.getTime, a.toLong << 31 + b.toLong) 

scala> val d = new Date() 
d: java.util.Date = Wed Mar 02 11:22:52 EST 2016 

scala> generate(d, 23, 43532) 
res23: java.util.UUID = 00000153-3823-9fa6-0000-000b8000aa0c 
1

如果你正在談論java.util.UUID(我想Scala使用這個Java對象),可以在nameUUIDFromBytes(byte[] name)的一些字節數組的基礎上創建UUID。所以你需要從你的Date,Int & Int創建這個數組。