簡體   English   中英

使用流收集HashMap中的事件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM