JAVA8에서 추가된 Stream 인터페이스는 많은 기능을 제공 합니다. 

특히 정렬, 필터, 통계 등을 람다(LAMBDA)표현식을 이용하여 간단하게 표출 하도록 도와 줍니다.


JAVA 5,6,7 에서의 방식

       List<Human> humanList = initialList();
        //남자인 사람의 수
        int manCount = 0;
        for(Human h : humanList){
            if(h.isMan() ){
                manCount  ++;
            }
        }

        //10세 이하인 사람의 나이 합산
        int below10_totalAvg = 0;
        for(Human h : humanList){
            if(h.getAge() < 10 ){
                below10_totalAvg += h.getAge();
            }
        }
     assertEquals(below10_totalAvg, 4);



JAVA 8 에서의 방식

 List<Human> humanList = initialList();
  Comparator<Human> byHumanSort = (be1, be2) -> Integer.compare(be1.getAge(), be2.getAge());
        //남자인 사람의 수
  long manCount =  humanList.stream()
                .filter(h -> h.isMan())
                .count();
       assertEquals(manCount, 2L);

        //10세 이하인 사람의 나이 합산
        int condition = 10;
        int below10_totalAvg =  humanList.stream()
                .filter(h -> h.getAge() < condition )
                .sorted(byHumanSort)//의미 없지만 정렬도 추가해봤음!
                .mapToInt(Human::getAge)
                .sum();

        assertEquals(below10_totalAvg , 4);




개인적인 생각은 JAVA8에서 좀 더 직관적이고 추후 여러 조건(예를 들어 정렬이나 다른 필터) 시 좀 더 유용하게 이용될 것이라 생각 된다.


참고 URL :

reference : https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html

정렬 관련 다른 POST : http://www.leveluplunch.com/java/tutorials/007-sort-arraylist-stream-of-objects-in-java8/#multiple-comparators

LAMBDA 관련 : https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html

Posted by lahuman

댓글을 달아 주세요