+-
java 8获取具有相同最大出现次数的元素
我有一个元素流,我想将它转换为另一个流,该流只包含在前一个流中出现最多的元素,假设我可能有多个具有相同出现次数的元素.

举个例子:

输入流:[‘A’,’B’,’A’,’B’,’C’,’C’,’A’,’B’]

输出流:[‘A’,B’],因为它们在前一个流中的最大出现次数等于3.

到目前为止,我已经编写了以下代码:

stream.collect(toMap(w -> w, w -> 1, Integer::sum))
                .entrySet()
                .stream()
                .max(comparing(Map.Entry::getValue))
                .map(Map.Entry::getKey);

但是这允许我只获得具有最大出现次数的一个元素,并且对于上面的情况,它将给出’A’或’B’.

有没有任何优雅的方式如何使用lambdas实现这一目标?

谢谢,干杯

最佳答案
这应该为你做的伎俩.

final List<Character> maxOccuringChars = chars.stream()
        .collect(Collectors.collectingAndThen(Collectors.groupingBy(Function.identity(), Collectors.counting()),
                map -> map.entrySet().stream()
                        .filter(entry -> entry.getValue().longValue() == map.entrySet().stream()
                                .max(Map.Entry.comparingByValue()).get().getValue().longValue())
                        .map(Map.Entry::getKey).collect(Collectors.toList())));

输出:

[A, B]

更新

我根据下面的评论更改了答案.

点击查看更多相关文章

转载注明原文:java 8获取具有相同最大出现次数的元素 - 乐贴网