2016-02-18 6 views
-1

У меня есть собственный класс PDFDataItem, предоставляющий метод getValue(), который возвращает двойное значение (см. Прилагаемый код). У меня также есть ArrayList из нескольких экземпляров PDFDataItem, каждый из которых имеет определенное значение: разные экземпляры могут иметь одинаковое значение. Что я хотел бы сделать, так это создать LinkedHashMap, где можно хранить, однозначно, значения экземпляров и для каждого найденного значения количество событий (то есть количество экземпляров, в которых оно сравнивается). Конечно, я могу найти множество трюков, чтобы достичь своей цели, но я хотел бы знать, существует ли быстрый метод (возможно, с использованием лямбда).Подсчет вхождений в список с Java 8

public class PDFDataItem{ 

    double value; 

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

    public double getValue(){ 
     return value; 
    } 
} 
+1

Пожалуйста, напишите, что вы пробовали до сих пор. –

+0

Есть ли конкретная причина, почему она должна быть «LinkedHashMap»? Кстати, равенства и «двойные» ценности не хорошие друзья. Вы должны переосмыслить либо задачу, либо выбранный тип данных. – Holger

+0

@Holger нет специфическая причина. Я чувствовал себя уверенно в Карте, и я подумал о LinkedHashMap. – Roberto

ответ

10

Вы можете использовать Stream<PDFDataItem> с Collectors.groupingBy()Collector для группировки PDFDataItem экземпляров по value собственности, а затем подсчитать количество элементов в каждой группе, используя Collectors.counting()Collector.

Map<Double,Long> valueCounts = 
    pdfList.stream() 
      .collect(Collectors.groupingBy(PDFDataItem::getValue,Collectors.counting())); 
+1

@Roberto Добро пожаловать – Eran

Смежные вопросы