[英]Java > 8 stream count multiple items at the same time
我有一个非常大的对象列表,我想根据它们的一个属性来计算对象的数量。 我现在拥有的是:
long low = myList.stream().filter(p -> p.getRate().equals("Low")).count();
long medium = myList.stream().filter(p -> p.getRate().equals("Medium")).count();
long high = myList.stream().filter(p -> p.getRate().equals("High")).count();
我不确定 Java 8 如何处理这个问题,但我担心性能! 无论如何,我可以在一次调用中计算这 3 个属性吗? 为了提高性能?
一些东西,以便它返回一个 Map 或对象列表。
您可以按每个对象的比率对您的List
进行分组并计算出现次数。 假设您的对象是MyClass
类型:
Map<String, Long> map = myList.stream().collect(groupingBy(MyClass::getRate, counting()));
这将返回一个Map
,其中键是比率,值是列表中具有该比率的元素数。 然后,只需获取"Low"
、 "Medium"
和"High"
键即可。
groupingBy(classifier, downstream)
是一个收集器,它根据给定的分类器(此处为MyClass::getRate
)对元素进行groupingBy(classifier, downstream)
并使用下游收集器(此处为counting()
)对值进行归约。
注意:代码编译需要以下静态导入:
import static java.util.stream.Collectors.counting;
import static java.util.stream.Collectors.groupingBy;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.