文字列のリストの一意の ID (整数として) を取得するにはどうすればよいですか?
たとえば、リストは次のよう["Cat","Dog","Cow","Cat","Rat"]
になります。
1 -> Cat
2 -> Dog
3 -> Cow
4 -> Rat
これと新しい構造を保存する必要があります。
編集: 重要なのは、それCat
が新しい構造で 1 回だけであることです。
文字列のリストの一意の ID (整数として) を取得するにはどうすればよいですか?
たとえば、リストは次のよう["Cat","Dog","Cow","Cat","Rat"]
になります。
1 -> Cat
2 -> Dog
3 -> Cow
4 -> Rat
これと新しい構造を保存する必要があります。
編集: 重要なのは、それCat
が新しい構造で 1 回だけであることです。
を使用できますHashMap<Integer, String>
。キーは current のインデックスになりList
、値は実際の になりString
ます。
例:
List<String> myList = new ArrayList<String>();
// no identical Strings here
Set<String> mySet = new LinkedHashSet<String>();
myList.add("Cat"); // index 0
myList.add("Dog"); // index 1
myList.add("Cow"); // etc
myList.add("Cat");
myList.add("Rat");
mySet.add("Cat"); // index 0
mySet.add("Dog"); // index 1
mySet.add("Cow"); // etc
mySet.add("Cat"); // index 0 - already there
mySet.add("Rat");
Map<Integer, String> myMap = new HashMap<Integer, String>();
for (int i = 0; i < myList.size(); i++) {
myMap.put(i, myList.get(i));
}
System.out.println(myMap);
Map<Integer, String> myOtherMap = new HashMap<Integer, String>();
int i = 0;
for (String animal: mySet) {
myOtherMap.put(i++, animal);
}
System.out.println(myOtherMap);
出力:
{0=Cat, 1=Dog, 2=Cow, 3=Cat, 4=Rat}
{0=Cat, 1=Dog, 2=Cow, 3=Rat}
プロセス内でのみ一意である場合は、新しい値が必要になるたびにAtomicInteger
andを使用できます。incrementAndGet()
それ以外の場合は、これを試すことができます
int uniqueId = 0;
int getUniqueId()
{
return uniqueId++;
}
スレッドセーフにしたい場合は、synchronized を追加します。
private enum Animals {
Cat,
Dog,
Cow,
Sheep,
Horse
}
Animals.Cat.ordinal()
-- あなたに番号を与えます。
Animals.valueOf("Cat");
-- 文字列を一致させます。