프로그래밍 노트/JAVA

[JAVA] Stream pipeline(스트림 파이프라인)

깡냉쓰 2019. 6. 17. 16:03
728x90
반응형

중간 처리와 최종 처리

스트림 은 데이터의 필터링, 매핑, 정렬, 그룹핑 등의 중간처리

합계, 평균, 카운팅, 최대값, 최소값 등의 최종 처리 를 파이프라인(pipelines)으로 해결한다.

스트림 = 중간처리 + 최종처리 로 구성
파이프라인 => 여러 개의 스트림이 연결되어 있는 구조를 말함

중간 스트림이 생성될 때 바로 요소들이 중간 처리되는 것이아니라, 최종 처리가 설정(시작)되기 전까지 중간처리는 지연된다. 최종처리가 시작되면 비로소 컬렉션 요소가 하나씩 중간 스트림에서 처리되고 최종 처리까지 오게된다.

public static void main(String[] args){
        List<Member> list = Arrays.asList(
                new Member("깡냉", Member.MALE, 30),
                new Member("여자깡냉", Member.FEMALE, 20),
                new Member("까랭", Member.MALE, 34),
                new Member("여자까랭", Member.FEMALE, 25)
        );

        double ageAvg = list.stream()                 // 오리지날 스트림
                .filter(m -> m.getSex() == Member.MALE)   // 중간 처리 스트림
                .mapToInt(Member :: getAge)               // 중간 처리 스트림
                .average()                                // 최종 스트림
                .getAsDouble();

        // 위의 코드는 사실 아래와 같다.
        // Stream<Member> maleFemaleStream = list.stream();
        // Stream<Member> maleStream = maleFemaleStream.filter(m -> m.getSex() == Member.MALE);
        // IntStream ageStream = maleStream.mapToInt(Member::getAge);
        // OptionalDouble optionalDouble = ageStream.average();
        // double ageAvg = optionalDouble.getAsDouble();

        System.out.println("남자 평균 나이 : " + ageAvg);
}

중간 처리 메소드와 최종 처리 메소드

 

[출처 : 이것이 자바다]

728x90
반응형