Я все еще пытаюсь полностью понять работу с пакетом 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