Java 8流。将数组转换为LinkedHashMap并继续在单个流中使用entrySet

时间:2017-12-24 16:07:04

标签: java-8 java-stream

我需要计算数组中单词的频率。并处理结果(我认为它必须是一个entrySet)... entrySet的顺序也很重要。所以我想,该数组必须转换为LinkedHashMap ...

Map<String, Integer> map = new LinkedHashMap<>();
for(String word : words) {
        Integer count  = map.get(word);
        count = (count == null) ? 1: ++count;
        map.put(word, count);
}       

我找到了下一个解决方案,但订单不受尊重。 是否可以在没有收集操作的情况下使用该流(但使用map或flatMap)?

Map<String, Long> collect = 
    wordsList.stream().collect(groupingBy(Function.identity(), counting()));

谢谢。

1 个答案:

答案 0 :(得分:0)

你已经关闭但是你需要使用groupingBy收集器,它带有3个这样的参数:

LinkedHashMap<String, Long> resultSet =
               wordsList.stream()
                        .collect(groupingBy(Function.identity(),
                                      LinkedHashMap::new, 
                                            counting()));

groupingBy收藏家的第二个论点是供应商,在您的情况下,因为您需要LinkedHashMap,那么您需要提供的内容如上所示。< / p>