Java 8에서 추가된 Stream은 Array나 Collection같은 데이터를 연속적으로 가공해서 처리할 수 있게 도와주는 클래스이다.
내부 반복자를 가져, 기존에 for문으로 처리했던 많은 일들을 보다 간결한 코드로 작성할 수 있게 해준다.
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에는 3가지 종류가 있다.
[ 1. 생성 ]