![](/img/trans.png)
[英]How to insert the same value for multiple keys of an HashMap using Java Streams
[英]Using a Hashmap in Java is it possible to print out the amount of keys will a same value?
如果我有一個具有完全相同的值但具有不同鍵的Hashmap,則可以使這些鍵具有相同的值,並打印出共享此值的鍵的數量以及共享的值本身,並且可以動態地做到這一點而無需費勁在if語句中編碼值? 例,
碼
HashMap<String, String> map = new HashMap<>();
map.put("Order1" " pending " );
map.put("Order2" " cancelled " );
map.put("Order3" " pending " );
map.put("Order4" " fulfilled " );
所需的輸出
pending 2
cancelled 1
fulfilled 1
您可以將值放入Set
以獲得唯一性,然后使用Collections.frequency
計數每個元素的出現次數:
Set<String> singles = new HashSet<>(map.values());
for(String element : singles) {
System.out.println(element + ": " + Collections.frequency(map.values(), element));
}
不,HashMap不能立即提供此功能。
但是,您可以使用兩種不同的方法來實現目標:
A)如果不需要經常檢查每個州的訂單數量,只需遍歷map.values()
並計算每個州的訂單數量
B)如果訂單數量很大,或者需要經常檢查狀態,則每次添加新訂單或更新其狀態時,請為新狀態增加一個計數器,為舊狀態減少該計數器。
另一個選擇是將每個值映射到一個數字。 這是使用流執行此操作的一種方法:
public static <K, V> Map<V, Long> foo(Map<K, V> map) {
return map.entrySet().stream()
.collect(Collectors.groupingBy(Map.Entry::getValue, Collectors.counting()));
}
然后,您可以像這樣打印出結果:
Map<String, String> map = ...;
foo(map).forEach((k, v) -> System.out.printf("%s %d%n", k, v));
您也可以對其進行修改,以了解哪些鍵被映射到相同的值。
public static <K, V> Map<V, List<K>> foo(Map<K, V> map) {
return map.entrySet().stream().collect(Collectors.groupingBy(
Map.Entry::getValue,
Collectors.mapping(Map.Entry::getKey, Collectors.toList())
));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.