스트림의 2 가지 속성 속성을 조합하여 결과를 그룹화하려는 작은 스 니펫 코드가 있습니다. 적절한 필터링을 한 후이 두 속성 (이 경우 AirportDay)을 보유하는 간단한 유형의 인스턴스를 만드는지도를 작성합니다. 이제 저는 그것들을 그룹화하고 카운트에 따라 내림차순으로 정렬하기를 원합니다. 내가 겪고있는 문제는 groupingBy 메서드에 대한 올바른 인수가 떠오르고 있습니다. 여기 내 코드는 지금까지 있습니다 :groupingBy를 사용하는 Java Stream.collect
final int year = getYear();
final int limit = getLimit(10, 1, 100);
repository.getFlightStream(year)
.filter(f -> f.notCancelled())
.map(f -> new AirportDay(f.getOriginAirport(), f.getDate()))
.collect(groupingBy(????? , counting())) // stuck here
.entrySet()
.stream()
.sorted(comparingByValue(reverseOrder()))
.limit(limit)
.forEach(entry -> {
AirportDay key = entry.getKey();
printf("%-30s\t%s\t%,10d\n",
key.getAirport().getName(),
key.getDate(),
entry.getValue()
);
});
나의 첫번째 본능 AirportDay이 : 그 그러나 이것은 분명히 작동하지 않습니다 통과했다 ... 난 당신이 오는에 제공 할 수있는 모든 지원을 감사하겠습니다
위의 문제에 대한 해결책을 제시하십시오.
당신이 AirportDay
으로 그룹화 할 경우, groupingBy
의 열쇠 만들 수있는 기능을 제공
두 개의 매개 변수가있는 유형을 사용하는 PairGroup이라는 일반 클래스를 만들었으므로 다른 속성 쌍을 함께 사용할 때 사용할 수 있습니다. 'PairGroup 클래스를 구현합니다.
은 Comparable> –
을 구현합니다. @TonyPiazza 2 개의 속성으로 만 그룹화하려는 경우'List'를 사용하여 다음과 같이 그룹화 할 수 있습니다 :'.collect (groupingBy (f -> Arrays .asList (f.prop1, f.prop2))'... –