스트림은 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자이다.
람다식으로 요소 처리 코드를 제공하여 코드가 좀 더 간결하게 할 수 있고 내부 반복자를 사용하므로 벙렬처리가 쉽다.
// int 배열
int[] array = {1, 2, 3, 4, 5};
IntStream intStream = Arrays.stream(array);
intStream.forEach(a -> System.out.println("a = " + a));
// String 배열
String[] strArray = { "김철수", "이철수", "박철수"};
Stream<String> strStream = Arrays.stream(strArray);
strStream.forEach(a -> System.out.println("a = " + a));
interface Collection<E> extends Iterable<E> {
default Stream<E> stream() {
return StreamSupport.stream(spliterator(), false);
}
}
public class CollectionStream {
public static void main(String[] args) {
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream = list.stream();
Stream<String> parallelStream = list.parallelStream();
}
}
컬렉션 타입의 경우 인터페이스에 추가된 디폴트 메소드 stream을 이용해서 스트림을 만들 수 있다.
public Stream<String> streamOf(List<String> list) {
return list == null || list.isEmpty() ? Stream.empty() : list.stream();
}
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
class Student {
private String name;
private int score;
public Student(String name, int score) {
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public int getScore() {
return score;
}
}
public class stream {
public static void main(String[] args) {
List<Student> studentList = Arrays.asList(
new Student("김김김", 80),
new Student("이이이", 90),
new Student("박박박", 60)
);
Stream<Student> stream = studentList.stream();
stream.forEach(s -> System.out.println("이름 = " + s.getName()));
}
}