Java 스트림의 Max 함수를 사용하여 모든 최대값 반환
Java 8의 람다 스트림에서 max 함수를 활용하는 경우 시나리오에서 불일치가 나타날 수 있습니다. 여러 개체가 동일한 최대값을 생성하는 경우. 이 함수는 실행 가능한 모든 후보를 평가하거나 고려하지 않고 임의의 대표값을 출력합니다.
이 제한 사항을 해결하려면 모든 최대값을 정확하게 검색하는 대체 방법이 필요합니다. 불행히도, 부분적인 결과를 저장하기 위해 컬렉션을 활용해야 하는 간단한 접근 방식을 사용할 수 없습니다.
2단계 솔루션
컬렉션에 저장된 입력의 경우(List< 문자열> 목록), 2단계 프로세스를 사용할 수 있습니다.
단일 패스 솔루션(스트림)
스트림을 사용하여 단일 패스 시나리오를 해결하려면, 제공된 비교기를 기반으로 사용자 정의 수집기를 구성할 수 있습니다.
static <T> Collector<T, ?, List<T>> maxList(Comparator<? super T> comp) { return Collector.of( ArrayList::new, (list, t) -> { int c; if (list.isEmpty() || (c = comp.compare(t, list.get(0))) == 0) { list.add(t); } else if (c > 0) { list.clear(); list.add(t); } }, (list1, list2) -> { // Processing for list merging logic } ); }
이 수집기를 스트림에서 활용하려면 간단히 수집 호출:
Stream<String> input = ... ; List<String> result = input.collect(maxList(comparing(String::length)));
위 내용은 `max` 함수를 사용하여 Java 스트림에서 모든 최대값을 반환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!