Java 8에서 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)));
와 내가 찾고 목록을 마련하기 위해 두 개의 맵을 병합.
. 즉, 귀하의 코드 조각은 귀하의 질문에 표시되지 않은 메소드에 대한 메소드 참조를 사용합니다. 또한 원본 소스가'VisitSummary' 또는'VisitSummaryBySource'의'List'인지 여부는 명확하지 않습니다. 귀하의 코드는 후자를 제안하지만, 왜 우리에게 미사용 클래스'VisitSummary'를 보여 줬는 지 명확하지 않습니다 ... – Holger
제 사과, 제 초기 게시물이 너무 길다는 사실을 깨닫고 난 후에 그 게시물을보다 간결하게하려고했습니다. 나는 코드를 자르거나 중요한 것을 남겨 두는 것보다 더 잘 알 것이다 :-) – Qrious