2016-09-14 3 views
2

아래는 예상대로 컴파일 타임에 실패한 코드 단편입니다.Java 스트림을 사용하여 컬렉션에서 최소 및 최대 수 찾기

내가 정말로하고 싶은 것은 스트림을 사용하여 모든 목록에서 최대 및 최소를 찾는 것입니다.

public class Delete { 

    public static void main(String[] args) { 

     List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 677, 0); 
     List<Integer> list1 = Arrays.asList(11, 12, 23, 34, 25, 77); 
     List<Integer> list2 = Arrays.asList(12, 21, 30, 14, 25, 67); 
     List<Integer> list3 = Arrays.asList(41, 25, 37, 84, 95, 7); 

     List<List<Integer>> largeList = Arrays.asList(list, list1, list2, list3); 

     System.out.println(largeList.stream().max(Integer::compare).get()); 
     System.out.println(largeList.stream().min(Integer::compare).get()); 
    } 

} 
+0

도 참조 http://stackoverflow.com/questions/25988707/find-max-min-sum-and-average-of-a -list/25988761 # 25988761 (복제는 가능하지만 'flatMap' 부분은 제외) –

+0

그리고'flatMap'에 대해서는 http://stackoverflow.com/questions/25147094/turn-a-list-of-lists-into- -list-using-lambdas – Tunaki

답변

8

을 당신은 당신의 코드가 작동하기 위해서는 단일 Stream<Integer>에 모든 List의의 요소를 평평하게해야한다 :

System.out.println(largeList.stream().flatMap(List::stream).max(Integer::compare).get()); 
System.out.println(largeList.stream().flatMap(List::stream).min(Integer::compare).get()); 

이가 아닌 그래도 List을 두 번 처리하면 minmax을 모두 찾을 수 있으므로 매우 효율적입니다. IntStream::summaryStatistics()을 사용하여 단일 공정에서 동일한 데이터 (더)

IntSummaryStatistics stats = largeList.stream(). 
             .flatMap(List::stream) 
             .mapToInt(Integer::intValue) 
             .summaryStatistics(); 
System.out.println(stats.getMin()); 
System.out.println(stats.getMax()); 
+0

편집 내용을 다시 되돌려 야합니다. –

+2

'IntSummaryStatistics'. 그 계급에 대해 결코 알지 못했다. +1 – Jatin

+0

Thnx. 나는 편집하는 동안 내가 답을 엉망으로 만든 줄 알았다. 그것은 동료 평론가에게주는 메모입니다. 우르 대답은 참으로 도움이되었습니다. –

2

이 시도 :

largeList.stream().flatMap(List::stream).max(Integer::compare).get(); 
관련 문제