>Java >java지도 시간 >Java 스트림에서 모든 최대값을 찾는 방법은 무엇입니까?

Java 스트림에서 모든 최대값을 찾는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-07 19:06:21429검색

How to Find All Maximum Values in a Java Stream?

Java 스트림에서 모든 최대값을 검색하는 방법

Java 8에서는 람다 및 스트림에서 max 함수를 사용하여 데이터세트의 최대값을 식별할 수 있습니다. . 그러나 여러 요소의 최대값이 동일한 경우 max는 그 중 하나를 임의로 선택하여 반환합니다.

예상 동작:

목표는 모든 요소의 목록을 검색하는 것입니다. 단일 요소가 아닌 최대값을 공유하는 요소

해결책:

API에는 이 기능에 대한 명시적인 방법이 없기 때문에 중간 저장 및 컬렉션 조작을 사용하여 맞춤형 솔루션을 구현할 수 있습니다. 다음은 두 가지 접근 방식입니다.

1. 2단계 솔루션(컬렉션용):

  • max를 사용하여 최대값을 찾아 저장합니다.
  • 최대값과 일치하는 요소만 포함하도록 컬렉션을 필터링합니다.
List<String> list = ... ;

int longest = list.stream()
                  .mapToInt(String::length)
                  .max()
                  .orElse(-1);

List<String> result = list.stream()
                          .filter(s -> s.length() == longest)
                          .collect(toList());

2. 단일 패스 솔루션(스트림용):

  • 스트림 처리 중에 현재 최대값을 가진 모든 요소 목록을 유지하는 사용자 정의 수집기를 사용합니다.
  • 수집된 항목을 반환합니다.
static <T> Collector<T, ?, List<T>> maxList(Comparator<? super T> comp) {
    // Implementation goes here (provided in the original response)
}

Stream<String> input = ... ;

List<String> result = input.collect(maxList(comparing(String::length)));

이 사용자 정의 수집기는 중간 결과를 추적하고 각 결과에 따라 상태를 업데이트합니다. 요소의 값을 현재 최대값과 비교합니다. 이 접근 방식을 활용하면 스트림이나 컬렉션의 모든 최대 값이 포함된 목록을 얻을 수 있습니다.

위 내용은 Java 스트림에서 모든 최대값을 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.