我有一些这样的数据:
Map<Integer, String> foo
现在,我可以使用String
foo.get(1)
但是也可以获得Integer
&#34; abc&#34;的所有String
?
与此伪代码类似:Integer[] someMore = foo.getKeys("abc")
答案 0 :(得分:3)
尝试:
Set<Integer> myInts = new HashSet<Integer>();
for(Entry<Integer, String> entry : foo.entrySet()) { // go through the entries
if(entry.getValue().equals("abc")) { // check the value
myInts.add(entry.getKey()); // add the key
}
}
// myInts now contains all the keys for which the value equals "abc"
答案 1 :(得分:1)
Map
未提供按值查找。我们需要通过迭代Map
条目
Set<Integer> matchingKeys = new HashSet<Integer>();
for(Entry<Integer, String> e : map.entrySet()) {
if(e.getValue().equals("abc")) {
matchingKeys.add(e.getKey());
}
}
答案 2 :(得分:0)
你无法通过常规地图获得。您必须致电foo.entrySet()
并自行创建阵列。
也许您会对使用双向地图感兴趣。这是一个线程,你可以阅读一下这个。 Bi-directional Map in Java?
答案 3 :(得分:0)
Map<Integer, String> map = new Map<Integer, String>();
ArrayList<Integer> arraylist = new ArrayList<Integer>();
for (Entry<Integer, String> entry : map.entrySet()) {
if (entry.getValue().equals("abc")) {
arraylist.add(entry.getKey());
}
}