【发布时间】:2019-08-07 18:08:22
【问题描述】:
我对 Java 很陌生,我正在尝试以函数式的方式编写以下逻辑。
我有一个对象列表,其中包含许多字段。 List<someObject>
目前感兴趣的领域是long timestamp 和String bookType
问题陈述是 - 我想在给定列表中找到与具有最低时间戳的 bookType 相同的对象的数量。
例如,如果我们根据timestamp对给定的对象列表进行升序排序,并且排序列表中的第一个对象具有bookType字段为SOMETYPE;然后我想用bookTypeSOMETYPE找出列表中有多少对象
我已经使用普通的旧非函数方式编写了这个逻辑,通过维护 2 个临时变量,然后遍历列表一次以找到最低的 timestamp 和相应的 bookType 以及每个 bookType 的计数
但这在 lambda 中运行是不可接受的,因为它要求变量为 final
我只能写出可以根据timestamp对给定列表进行排序的部分
n.stream().sorted(Comparator.comparingLong(someObject::timestamp)).collect(Collectors.toList());
我被困在如何继续查找最低 timestamp bookType 的计数
【问题讨论】:
-
你不需要排序。只找到时间戳最低的对象。 docs.oracle.com/javase/8/docs/api/java/util/stream/…。然后你需要做第二遍并过滤流(docs.oracle.com/javase/8/docs/api/java/util/stream/…),并计算过滤元素的数量(docs.oracle.com/javase/8/docs/api/java/util/stream/…)
-
@JBNizet 非常感谢您的指导
标签: java java-8 functional-programming java-stream