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

使用Java 8计算列表中的出现次数,java,java-8,java-stream,Java,Java 8,Java Stream,我有一个自定义类PDFDataItem,它提供了getValue()方法,该方法返回一个双精度值(请参阅附带的代码)。 我还有一个包含多个PDFDataItem实例的ArrayList,每个实例都有一个特定的值:不同的实例可以有相同的值。 我想做的是创建一个LinkedHashMap,在其中以单音存储实例的值,以及对于找到的每个值,发生的次数(即比较的实例数)。 当然,我可以找到很多技巧来达到我的目标,但我想知道是否存在一种快速方法(可能使用lambda) 您可以将流与收集器一起使用。group

我有一个自定义类PDFDataItem,它提供了getValue()方法,该方法返回一个双精度值(请参阅附带的代码)。 我还有一个包含多个PDFDataItem实例的ArrayList,每个实例都有一个特定的值:不同的实例可以有相同的值。 我想做的是创建一个LinkedHashMap,在其中以单音存储实例的值,以及对于找到的每个值,发生的次数(即比较的实例数)。 当然,我可以找到很多技巧来达到我的目标,但我想知道是否存在一种快速方法(可能使用lambda)


您可以将
收集器一起使用。groupingBy()
收集器
通过
属性对
PDFDataItem
实例进行分组,然后使用
收集器对每组中的元素数进行计数。counting()
收集器

Map<Double,Long> valueCounts = 
    pdfList.stream()
           .collect(Collectors.groupingBy(PDFDataItem::getValue,Collectors.counting()));
映射值计数=
pdfList.stream()
.collect(Collectors.groupingBy(PDFDataItem::getValue,Collectors.counting());

请发布您到目前为止尝试过的内容。是否有特定的原因说明它必须是
LinkedHashMap
?顺便说一下,平等和双重价值观不是好朋友。您应该重新考虑任务或所选的数据类型。@Holger没有具体原因。我对地图很有信心,于是想到了LinkedHashMap。
Map<Double,Long> valueCounts = 
    pdfList.stream()
           .collect(Collectors.groupingBy(PDFDataItem::getValue,Collectors.counting()));