This question already has answers here:
Count int occurrences with Java8
(6个答案)
4年前关闭。
我有一个自定义类PDFDataItem,它提供了getValue()方法,该方法返回一个双精度值(请参阅随附的代码)。
我还有一个包含多个PDFDataItem实例的ArrayList,每个实例都有一个特定的值:不同的实例可以具有相同的值。
我想做的是创建一个LinkedHashMap,用于在其中存储实例的值,并且对于找到的每个值,分别存储发生的次数(即,在其中进行比较的实例数)。
当然,我可以找到很多实现目标的技巧,但我想知道是否存在一种快速方法(可能使用lambda)。
(6个答案)
4年前关闭。
我有一个自定义类PDFDataItem,它提供了getValue()方法,该方法返回一个双精度值(请参阅随附的代码)。
我还有一个包含多个PDFDataItem实例的ArrayList,每个实例都有一个特定的值:不同的实例可以具有相同的值。
我想做的是创建一个LinkedHashMap,用于在其中存储实例的值,并且对于找到的每个值,分别存储发生的次数(即,在其中进行比较的实例数)。
当然,我可以找到很多实现目标的技巧,但我想知道是否存在一种快速方法(可能使用lambda)。
public class PDFDataItem{
double value;
public PDFDataItem(double value){
this.value = value;
}
public double getValue(){
return value;
}
}
最佳答案
您可以将Stream<PDFDataItem>
与Collectors.groupingBy()
Collector
一起使用,以通过PDFDataItem
属性对value
实例进行分组,然后使用Collectors.counting()
Collector
计算每个组中的元素数量。
Map<Double,Long> valueCounts =
pdfList.stream()
.collect(Collectors.groupingBy(PDFDataItem::getValue,Collectors.counting()));
07-26 04:30