Am1*_*3zA 5 java count filter java-8 java-stream
我有一个非常大的对象列表,我想根据它们的一个属性计算对象的数量.我现在拥有的是:
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();
Run Code Online (Sandbox Code Playgroud)
我不确定Java 8如何处理这个但我担心表演!无论如何,我可以在一次通话中统计这3个属性吗?为了提高性能?
某种东西,它返回一个Map或对象列表.
Tun*_*aki 10
您可以List按每个对象的比率对您进行分组,并计算出现次数.假设您的对象是类型MyClass:
Map<String, Long> map = myList.stream().collect(groupingBy(MyClass::getRate, counting()));
Run Code Online (Sandbox Code Playgroud)
这将返回一个Map键,其中键是速率,值是具有该速率的列表中的元素数.然后,它只是得到的事情"Low","Medium"和"High"钥匙.
groupingBy(classifier, downstream)是一个收集器,它根据给定的分类器(在这里,它是MyClass::getRate)对元素进行分组,并使用下游收集器(这里,它counting())对值进行减少.
注意:编译代码需要以下静态导入:
import static java.util.stream.Collectors.counting;
import static java.util.stream.Collectors.groupingBy;
Run Code Online (Sandbox Code Playgroud)