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