스트림 API를 사용하여 groupingBy
->counting
연산을 사용하여 수집 한 후 필터링하면 어떻게 발생 횟수 필터를 기반으로하는 항목이 포함됩니까?발생 횟수를 기준으로 항목을 필터링하는 방법은 무엇입니까?
Map<Integer, Long> counts = Stream.of(1, 2, 2, 3, 4, 5, 5)
.collect(groupingBy(n -> n, counting()));
어떻게 난 단지 키 2
및 5
를 포함하는이를 필터링 할 다음 감안할 때
?
다음을 사용할 수는 있지만 먼저 수집해야하는 대신 스트림을 계속 사용할 수 있기를 바랬습니다.
Map<Integer, Long> counts = Stream.of(1, 2, 2, 3, 4, 5, 5)
.collect(groupingBy(n -> n, counting()))
.entrySet().stream()
.filter(n -> n.getValue() > 1)
.collect(toMap(Entry::getKey, Entry::getValue));
점이 구별하는 것이 되
parallel
실행 및/또는 단락limit
또는findAny
같은 조작으로 조화 된 병렬로 작동하며, 함수를 만족하는 첫 번째 인수를 받아들이는 개수를 유지하는 spliterator를 제공 할 수 있습니다 (예를 들어보다 큼). spliterator는 카운트를 수락하기 전에 모두를 방문해야하는 경우 제어하기위한 인수가 필요합니다. 스트림을 소트하면 (자), 각 수용은 스트림 파이프 라인으로 오브젝트를 곧 통과시킵니다. –그건 서면으로 질문 범위를 벗어납니다. 스트림에 * 정렬 된 * 속성이 없으며 질의에 표시된 작업은 어떤 경우에도 각 항목을 처리해야하는 발생 횟수에 따라지도에 결과를 수집하는 것과 같이 복잡한 구현으로 인해 어떠한 이익도 발생하지 않습니다 . – Holger
간단한 예를 들어,지도에 수집하지 말았어야했는데, 내가 달성하려고 시도한 것을 강조하기 위해 사용했는데, 결과가 중요하지 않은지, spliterator가 업스트림을 정렬 할 필요가 없다는 것을 강조했습니다. 강조 표시 만하면 도움이 될 수 있습니다. 사용할 수있는 것이 없다고 생각합니다. 설명한대로 스플 뢰 네이터 구현을 시도해 볼 수 있습니다. –