java - Java 8 Stream API 中连续计算相同项目的数量

标签 java java-8 functional-programming

我有一个 bean 和一个流

public class TokenBag {
    private String token;
    private int count;
    // Standard constructor and getters here
}
Stream<String> src = Stream.of("a", "a", "a", "b", "b", "a", "a");

并且想要对返回 TokenBag 对象的另一个流的流应用一些中间操作。在此示例中,必须有两个:("a", 3)、("b", 3) 和 ("a", 2)。

请把它看作一个非常简单的例子。实际上,逻辑比仅仅计算一行中的相同值要复杂得多。实际上,我尝试设计一个简单的解析器,它接受 token 流并返回对象流。

另请注意,它必须保持流(没有中间累积),并且在本例中,它必须真正计算一行中的相同值(它与分组不同)。

非常感谢您对此任务解决方案的一般方法提出建议。

最佳答案

Map<String, Long> result = src.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
System.out.println(result);

这将给出所需的输出

a=4, b=3

然后您可以继续迭代映射并创建 TokenBag 对象。

关于java - Java 8 Stream API 中连续计算相同项目的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48439457/

相关文章:

java - 如何过滤动态嵌套的列表对象java 8

java-8 - Java 8 的循环依赖分析 - 用于自动构建

scala - 找不到用于排序的 Traverse Seq[ValidationNel[String, MyCaseClass]] => ValidationNel[String, Seq[MyCaseClass]]

functional-programming - 如何在F#中正确实现reduce函数

java - Joda 和移动程序/将程序放在多台计算机上

java - 未能获取信号量的线程会发生什么情况?

java - "Code as Data"是什么意思?

java - js判断iframe是否包含图片

java - 字符串日期到世界时间的转换java

.net - F# 和 ADO.NET - 惯用的 F#