Java 8에서 추가된 Stream은 Array나 Collection같은 데이터를 연속적으로 가공해서 처리할 수 있게 도와주는 클래스이다.

내부 반복자를 가져, 기존에 for문으로 처리했던 많은 일들을 보다 간결한 코드로 작성할 수 있게 해준다.

기본 Stream 코드

Student 객체 들을 담은 students라는 ArrayList가 있다고 가정하자.

이 학생들 중에서 성적이 80점 이상인 학생이 몇 명인지 확인하고 싶다는 요청이 생겼다.

int passedStudents = 0;
for (Student s: students) {
	if (s.score >= 80)
    	passedStudents++;
}

Stream을 사용하면 한 줄로 끝낼 수 있다. 여기서 filter() 는 Predicate 객체를 인자로 받는다.

int passedStudents = (int) students.stream().filter(s -> s.score >= 80).count();

Predicate는 test 추상 메서드를 가지고 있음을 기억하나?

어디에도 Predicate 객체라고 써있지 않지만 저 람다식 자체가 '익명의' Predicate 객체라는 사실!

물론 앞에다가 Predicate 객체를 따로 만들고 저 자리에 그 이름을 넣는 것도 가능하다.

Stream API의 연산 종류

Stream API에는 3가지 종류가 있다.

[ 1. 생성 ]