[Stream] 스트림의 파이프라인

파이프라인

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

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

- 파이프라인은 중간처리에서 이어져서 최종처리까지 이어지는 스트림의 라인이라고 볼 수 있다.

파이프라인 설명

파이프라인 예제
public class Member {
	public static int MALE = 0;
	public static int FEMALE = 1;
	
	private String name;
	private int sex;
	private int age;
	
	public Member(String name, int sex, int age) {
		this.name = name;
		this.sex = sex;
		this.age = age;
	}
	
	public int getSex() {return sex;}
	public int getAge() {return age;}
}
public class StreamPipelinesExample {
	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,45),
			new Member("차카타",Member.FEMALE,27)
		);
		
		double ageAvg = list.stream()
			.filter(m -> m.getSex() == Member.MALE)
			.mapToInt(Member::getAge) //Member클래스의 age 값으로 intStream을 가져온다.
			.average()
			.getAsDouble();
		System.out.println("남자 평균 나이 :"+ageAvg);
	}
}

- 4개의 Member 객체로 이루어진 list 개체에서 필터를 통해 남자의 평균나이를 구하는 예제!

- filter() 메소드는 if문안에들어갈 제어조건을 걸면된다. 여기서는 성별이 남자인지를 구하는 코드를 썻다.

- mapToInt() 메소드는 스트림을 IntStream으로 변경한다는 것인데 Member 객체의 Age 값으로 IntStream을 반환하겠다는 것이다.

- average() 메소드는 IntStream을 이루는 모든 요소의 평균을 반환한다. getAsDouble() 메소드는 그 평균값을 double 형으로 반환한다.

 

 

- 스트림에서 중간처리 메소드와 최종처리 메소드를 구분하기 위해서는 Return Type을 꼭 확인하기 바란다.

- 중간처리 메소드는 대부분 다시 Stream형태로 반환하고, 최종처리 메소드는 기본타입이거나 OptionalXXX 타입으로 반환한다.

댓글

Designed by JB FACTORY