2015-06-13 45 views
1

有沒有辦法找出所有在地圖上具有相同值的密鑰。 像Java找到所有具有特定值的密鑰

map.put("A","Abc"); 
map.put("B","Abc"); 
map.put("C","Abc"); 
map.put("D","Bcd"); 

在這裏,我想找出所有具有值「ABC」的關鍵。

+0

是的,有 - 參見[這個問題](HTTP://計算器。 COM /問題/ 1383797/Java的HashMap中,如何對取得琴鍵從值)。 – Glorfindel

回答

0

是的,有一種方法。您可以從地圖獲取鍵值對列表。然後,只需要篩選映射到特定值的鍵即可。

,像這樣的例子:

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 
     } 
    } 
} 

我希望這有助於:)

2

找到所有的 「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()); 
+0

感謝folkol bt現在我正在使用Java 7 ........ –

+0

好的,我將添加一個Java 7示例。但我認爲你應該儘快升級到Java 8! – folkol

2

你也可以使用番石榴過濾器。

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)); 
相關問題