有沒有辦法找出所有在地圖上具有相同值的密鑰。 像Java找到所有具有特定值的密鑰
map.put("A","Abc");
map.put("B","Abc");
map.put("C","Abc");
map.put("D","Bcd");
在這裏,我想找出所有具有值「ABC」的關鍵。
有沒有辦法找出所有在地圖上具有相同值的密鑰。 像Java找到所有具有特定值的密鑰
map.put("A","Abc");
map.put("B","Abc");
map.put("C","Abc");
map.put("D","Bcd");
在這裏,我想找出所有具有值「ABC」的關鍵。
是的,有一種方法。您可以從地圖獲取鍵值對列表。然後,只需要篩選映射到特定值的鍵即可。
,像這樣的例子:
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<String, String>();
map.put("A", "Abc");
map.put("B", "Abc");
map.put("C", "Abc");
map.put("D", "Bcd");
Set<Entry<String, String>> set = map.entrySet();//<-- get key-value pairs
for(Entry<String, String> entry : set){//<-- iterate over all entries
if(entry.getValue().equals("Abc")){//<-- check for your value
System.out.println(entry.getKey());//<-- print the key/or add it to a list if you want
}
}
}
我希望這有助於:)
找到所有的 「X」,這樣的 「Y」被稱爲filtering
。
這是你怎麼能filter using Java 8 Streams:
Stream<String> keys = map.entrySet().stream()
.filter(x -> "Abc".equals(x.getValue()))
.map(Map.Entry::getKey);
對於Java 7,你必須手工進行:
List<String> keys = new ArrayList<>();
for(Map.Entry<String, String> e : map.entrySet())
if("Abc".equals(e.getValue()))
keys.add(e.getKey());
感謝folkol bt現在我正在使用Java 7 ........ –
好的,我將添加一個Java 7示例。但我認爲你應該儘快升級到Java 8! – folkol
你也可以使用番石榴過濾器。
Map<String, String> map = Maps.newHashMap();
map.put("A", "abc");
map.put("B", "abc");
map.put("C", "a3c");
map.put("D", "abc");
final String str = "a3c";
Map<String, String> filteredMap = Maps.filterEntries(map, new Predicate<Map.Entry<String, String>>() {
@Override
public boolean apply(final Map.Entry<String, String> stringStringEntry) {
return stringStringEntry.getValue().equals(str);
}
});
這將返回具有str
的值中的所有地圖項的地圖。
僅供參考,我只提供的功能定義,以顯示它是什麼做不過我會建議使用預定義的謂詞,例如:
Map<String, String> filteredMap = Maps.filterValues(map, Predicates.equalTo(str));
是的,有 - 參見[這個問題](HTTP://計算器。 COM /問題/ 1383797/Java的HashMap中,如何對取得琴鍵從值)。 – Glorfindel