我有一个自定义类PDFDataItem,提供getValue()方法,该方法返回一个double值(请参阅附带的代码)。 我还有一个包含多个PDFDataItem实例的ArrayList,每个实例都有一个特定的值:不同的实例可以具有相同的值。 我想要做的是创建一个LinkedHashMap,其中单独存储实例的值,并且对于找到的每个值,存储的数量(即它比较的实例的数量)。 当然,我可以找到许多技巧来实现我的目标,但我想知道是否存在快速方法(可能使用lambda)。
public class PDFDataItem{
double value;
public PDFDataItem(double value){
this.value = value;
}
public double getValue(){
return value;
}
}
答案 0 :(得分:13)
您可以Stream<PDFDataItem>
与Collectors.groupingBy()
Collector
一起使用PDFDataItem
属性对value
个实例进行分组,然后计算每个组中的元素数量使用Collectors.counting()
Collector
。
Map<Double,Long> valueCounts =
pdfList.stream()
.collect(Collectors.groupingBy(PDFDataItem::getValue,Collectors.counting()));