Все още се опитвам да разбера напълно работата с пакета Stream в Java 8 и се надявах на малко помощ.
Имам клас, описан по-долу, чиито екземпляри получавам в списък като част от извикване на база данни.
class VisitSummary {
String source;
DateTime timestamp;
Integer errorCount;
Integer trafficCount;
//Other fields
}
За да генерирам някаква евентуално полезна информация за това, имам клас VisitSummaryBySource
, който съдържа общата сума на всички посещения (за даден период от време):
class VisitSummaryBySource {
String sourceName;
Integer recordCount;
Integer errorCount;
}
Надявах се да създам List<VisitSummaryBySource>
колекция, която, както звучи името, съдържа списъка с VisitSummaryBySource
обекти, съдържащ общата сума на записите и откритите грешки за всеки различен източник.
Има ли начин да постигна това с помощта на потоци в една операция? Или трябва непременно да разделя това на множество операции? Най-доброто, което можах да измисля, е:
Map<String, Integer> recordsBySrc = data.parallelStream().collect(Collectors.groupingBy(VisitSummaryBySource::getSource,
Collectors.summingInt(VisitSummaryBySource::getRecordCount)));
и да се изчислят грешките
Map<String, Integer> errorsBySrc = data.parallelStream().collect(Collectors.groupingBy(VisitSummaryBySource::getSource,
Collectors.summingInt(VisitSummaryBySource::getErrorCount)));
и обединяване на двете карти, за да се получи списъкът, който търся.
List
отVisitSummary
илиVisitSummaryBySource
. Вашият код предполага последното, но тогава не е ясно защо сте ни показали неизползвания класVisitSummary
... - person Holger   schedule 16.01.2015