如何为字符串列表获取唯一ID(作为整数)?
E.g。该列表看起来像["Cat","Dog","Cow","Cat","Rat"]
结果应该是:
1 -> Cat
2 -> Dog
3 -> Cow
4 -> Rat
我需要保存这个和新结构。
编辑:重要的是,Cat
在新结构中只有一次。
答案 0 :(得分:4)
您可以使用HashMap<Integer, String>
。关键是当前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}
答案 1 :(得分:1)
如果它只是一个流程中的唯一,那么您可以使用AtomicInteger
并在每次需要新值时调用incrementAndGet()
。
否则你可以试试这个
int uniqueId = 0;
int getUniqueId()
{
return uniqueId++;
}
如果您希望它是线程安全的,请添加synchronized。
答案 2 :(得分:1)
private enum Animals {
Cat,
Dog,
Cow,
Sheep,
Horse
}
Animals.Cat.ordinal()
- 为您提供号码。
Animals.valueOf("Cat");
- 将字符串与。
答案 3 :(得分:1)