89일 차 - 스트림 (Stream) (23.05.08)

yvonne·2023년 5월 8일
0

📂Java

목록 보기
49/51
post-thumbnail

📝 스트림 (Stream)

📂 스트림의 이해

  1. IO 스트림과는 전혀 다른 개념

  2. 자바에서는 많은 양의 데이터를 저장하기 위해서 배열이나 컬렉션을 사용하는데, 이렇게 저장된 데이터에 접근하기 위해서는 반복문이나 반복자(iterator)를 사용하여 매번 새로운 코드를 작성

  • 이렇게 작성된 코드는 길이가 너무 길고 가독성도 떨어지며, 코드의 재사용이 거의 불가
    즉, 데이터베이스의 쿼리와 같이 정형화된 처리 패턴을 가지지 못했기에 데이터마다 다른 방법으로 접근
  1. 문제점을 극복하기 위해서 Java SE 8부터 스트림(stream) API를 도입

  2. 스트림 API는 데이터를 추상화하여 다루므로, 다양한 방식으로 저장된 데이터를 읽고 쓰기 위한 공통된 방법을 제공

  • 스트림 API를 이용하면 배열이나 컬렉션뿐만 아니라 파일에 저장된 데이터도 모두 같은 방법으로 다룰 수 있게 됨



📂스트림 API의 동작 흐름

  • 스트림 API는 다음과 같이 세 가지 단계에 걸쳐서 동작합니다.
  1. 스트림의 생성
  2. 스트림의 중개 연산 (스트림의 변환)
  3. 스트림의 최종 연산 (스트림의 사용)



📍 스트림의 중개 연산 함수

- filter() / distinct()
- map() / flatMap()
- sorted()
- peek()
- limit()
- skip()

📍 최종연산함수 종류

- forEach()
- match()
- sum(), count(), average(), max(), min() 
- reduce()
- collect()



📂 스트림 활용

✔ StreamExample.java

import java.util.ArrayList;
import java.util.stream.IntStream;
import java.util.stream.Stream;

/*  스트림의 이해
* 1. 입력과 출력(IO Stream) 수업에서 살펴본 스트림과는 전혀 다른 개념
* 2.자바에서는 많은 양의 데이터를 저장하기 위해서 배열이나 컬렉션을 사용합니다.
* 이렇게 저장된 데이터에 접근하기 위해서는 반복문이나 반복자(iterator)를 사용하여 매번 새로운 코드를 작성
* 이렇게 작성된 코드는 길이가 너무 길고 가독성도 떨어지며, 코드의 재사용이 거의 불가
* 즉, 데이터베이스의 쿼리와 같이 정형화된 처리 패턴을 가지지 못했기에 데이터마다 다른 방법으로 접근
* 3. 문제점을 극복하기 위해서 Java SE 8부터 스트림(stream) API를 도입
* 4.스트림 API는 데이터를 추상화하여 다루므로, 다양한 방식으로 저장된 데이터를 읽고 쓰기 위한 공통된 방법을 제공
* 스트림 API를 이용하면 배열이나 컬렉션뿐만 아니라 파일에 저장된 데이터도 모두 같은 방법으로 다룰 수 있게 됨
*/

/*
 * 스트림 API의 동작 흐름
 * 스트림 API는 다음과 같이 세 가지 단계에 걸쳐서 동작합니다.
 * 1. 스트림의 생성
 * 2. 스트림의 중개 연산 (스트림의 변환)
 * 3. 스트림의 최종 연산 (스트림의 사용)
 */

public class StreamExample {

	public static void main(String args[]) {

		ArrayList<Integer> list = new ArrayList<Integer>();
		for (int i = 1; i <= 10; i++) {
			list.add(i);
		}

		for (int i : list) {
			System.out.print(i + "\t");
		}
		System.out.println();

		// 스트림 활용
		Stream<Integer> stream = list.stream(); // stream()를 통해 list를 Stream 객체로 변환
		stream.forEach(i -> System.out.print(i + "\t"));
		System.out.println();

		// 짝수만 출력하기
		for (int i : list) {
			if (i % 2 == 0) {
				System.out.print(i + "\t");
			}
		}
		System.out.println();

		// 스트림 활용
		stream = list.stream();
		stream.filter(i -> i % 2 == 0).forEach(i -> System.out.print(i + "\t"));
		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));

	}
}
  • 결과
profile
개발 연습장

0개의 댓글