使用Java 8计算列表中的出现次数

Rob*_*rto -1 java java-8 java-stream

我有一个自定义类PDFDataItem,提供getValue()方法,该方法返回一个double值(请参阅附加的代码).我还有一个包含多个PDFDataItem实例的ArrayList,每个实例都有一个特定的值:不同的实例可以具有相同的值.我想要做的是创建一个LinkedHashMap,其中单独存储实例的值,并且对于找到的每个值,存储的数量(即它比较的实例的数量).当然,我可以找到许多技巧来实现我的目标,但我想知道是否存在快速方法(可能使用lambda).

public class PDFDataItem{

    double value;

    public PDFDataItem(double value){
        this.value = value;
    }

    public double getValue(){
        return value;
    }
}
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 14

您可以使用Stream<PDFDataItem>with Collectors.groupingBy() CollectorPDFDataItemvalue属性对实例进行分组,然后使用Collectors.counting() Collector.来计算每个组中的元素数.

Map<Double,Long> valueCounts = 
    pdfList.stream()
           .collect(Collectors.groupingBy(PDFDataItem::getValue,Collectors.counting()));
Run Code Online (Sandbox Code Playgroud)