1. 스트림의 이해
- 입출력 스트림(IO Stream)과는 다르다
- 자바에서는 많은 양의 데이터를 저장하기 위해서 배열이나 컬렉션을 사용 ->
이렇게 저장된 데이터에 접근하기 위해서는 반복문이나 반복자(iterator)를 사용하여 매번 새로운 코드를 작성함 ->
이렇게 작성된 코드는 길이가 너무 길고 가독성도 떨어지며, 코드의 재사용이 거의 불가 ->
데이터베이스의 쿼리와 같이 정형화된 처리 패턴을 가지지 못했기에 데이터마다 다른 방법으로 접근
- 문제점을 극복하기 위해서 Java SE 8부터 스트림(stream) API를 도입
- 스트림 API는 데이터를 추상화하여 다루므로, 다양한 방식으로 저장된 데이터를 읽고 쓰기 위한 공통된 방법을 제공
스트림 API를 이용하면 배열이나 컬렉션뿐만 아니라 파일에 저장된 데이터도 모두 같은 방법으로 다룰 수 있게 됨
2. 스트림 API 동작의 흐름
- 스트림의 생성
- 스트림의 중개 연산 (스트림의 변환)
- 스트림의 최종 연산 (스트림의 사용)
3. 스트림 함수
스트림의 중개 연산 함수
- filter() / distinct()
- map() / flatMap()
- sorted()
- peek()
- limit()
- skip()
스트림의 최종 연산함수
- forEach()
- match()
- sum(), count(), average(), max(), min()
- reduce()
- collect()
4. 스트림의 표현
import java.util.stream.IntStream;
public class stream_example {
public static void main(String[] args) {
IntStream.rangeClosed(1,10).forEach(i->System.out.println(i));
}
}
package java_lambda_example_stream;
import java.util.ArrayList;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class stream_example {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 1; i <= 10; i++) {
list.add(i);
}
Stream<Integer> stream = list.stream();
stream.forEach(i -> System.out.println(i));
}
}
package java_lambda_example_stream;
import java.util.ArrayList;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class stream_example {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 1; i <= 10; i++) {
list.add(i);
}
Stream<Integer> stream = list.stream();
stream.filter(i -> i % 2 == 0).forEach(System.out::println);
}
}