繁体   English   中英

Java > 8 流同时计算多个项目

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM