Java 8에서는 람다 및 스트림에서 max 함수를 사용하여 데이터세트의 최대값을 식별할 수 있습니다. . 그러나 여러 요소의 최대값이 동일한 경우 max는 그 중 하나를 임의로 선택하여 반환합니다.
예상 동작:
목표는 모든 요소의 목록을 검색하는 것입니다. 단일 요소가 아닌 최대값을 공유하는 요소
해결책:
API에는 이 기능에 대한 명시적인 방법이 없기 때문에 중간 저장 및 컬렉션 조작을 사용하여 맞춤형 솔루션을 구현할 수 있습니다. 다음은 두 가지 접근 방식입니다.
1. 2단계 솔루션(컬렉션용):
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!