[英]Collecting occurrences in a HashMap with streams
我有一個練習要解決。 我有一個Fox類,其中有名稱和顏色字段。 我的工作是按顏色查找狐狸的頻率。
因此,我創建了一個HashMap,其中String屬性將是fox名稱,而Integer將是事件本身:
Map<String, Integer> freq = new HashMap<>();
完成此操作后,我一直在嘗試使用流編寫代碼,但我一直在努力做到這一點。 我寫了這樣的東西:
foxes.stream()
.map(Fox::getColor)
.forEach()
//...(continued later on);
,其中foxes是一個List。
我的問題基本上是語法。 我想做些什么,如果顏色沒有出現,那么
freq.put(Fox::getName, 1)
其他
freq.replace(Fox::getName, freq.get(Fox::getName) + 1)
我應該怎么放在一起?
我不建議繼續使用您的方法,因為在收集器中已經內置了此功能,即groupingBy
收集器,其counting()
作為下游:
Map<String, Long> result = foxes.stream()
.collect(Collectors.groupingBy(Fox::getName, Collectors.counting()));
這將通過“名稱”找到頻率,同樣,您可以通過更改分類功能來通過顏色獲得頻率。
foxes.stream()
.collect(Collectors.groupingBy(Fox::getColor, Collectors.counting()));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.