> Java > java지도 시간 > `max` 함수를 사용하여 Java 스트림에서 모든 최대값을 반환하는 방법은 무엇입니까?

`max` 함수를 사용하여 Java 스트림에서 모든 최대값을 반환하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-13 12:24:11
원래의
891명이 탐색했습니다.

How to Return All Maximum Values from a Java Stream Using the `max` Function?

Java 스트림의 Max 함수를 사용하여 모든 최대값 반환

Java 8의 람다 스트림에서 max 함수를 활용하는 경우 시나리오에서 불일치가 나타날 수 있습니다. 여러 개체가 동일한 최대값을 생성하는 경우. 이 함수는 실행 가능한 모든 후보를 평가하거나 고려하지 않고 임의의 대표값을 출력합니다.

이 제한 사항을 해결하려면 모든 최대값을 정확하게 검색하는 대체 방법이 필요합니다. 불행히도, 부분적인 결과를 저장하기 위해 컬렉션을 활용해야 하는 간단한 접근 방식을 사용할 수 없습니다.

2단계 솔루션

컬렉션에 저장된 입력의 경우(List< 문자열> 목록), 2단계 프로세스를 사용할 수 있습니다.

  1. 가장 긴 문자열의 길이를 확인합니다. (예: int maximum = list.stream().mapToInt(String::length).max().orElse(-1);).
  2. 목록을 필터링하여 최대 길이( 예: List 결과 = list.stream().filter(s -> s.length() == maximum).collect(toList());).

단일 패스 솔루션(스트림)

스트림을 사용하여 단일 패스 시나리오를 해결하려면, 제공된 비교기를 기반으로 사용자 정의 수집기를 구성할 수 있습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿