Java 람다와 스트림 03 (23.05.08)

Jane·2023년 5월 8일
0

IT 수업 정리

목록 보기
119/124

1. 스트림의 이해

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

2. 스트림 API 동작의 흐름

  1. 스트림의 생성
  2. 스트림의 중개 연산 (스트림의 변환)
  3. 스트림의 최종 연산 (스트림의 사용)

3. 스트림 함수

스트림의 중개 연산 함수

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

스트림의 최종 연산함수

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

4. 스트림의 표현

  • 1부터 10까지 출력하기
import java.util.stream.IntStream;

public class stream_example {

	public static void main(String[] args) {
		/*
		 * for (int i = 1; i <= 10; i++) { System.out.println(i); }
		 */

		IntStream.rangeClosed(1,10).forEach(i->System.out.println(i));
	}

}
  • ArrayList 다루기
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);
		}

		// for-each문을 이용한 출력
		/*
		 * for(int i : list) { System.out.println(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);
		}

		/*
		 * for (int i : list) { if (i % 2 == 0) { System.out.println(i); } }
		 */

		// 짝수만 보여주기

		Stream<Integer> stream = list.stream();
	//	stream.filter(i -> i % 2 == 0).forEach(i -> System.out.println(i));
		stream.filter(i -> i % 2 == 0).forEach(System.out::println);
	}

}
profile
velog, GitHub, Notion 등에 작업물을 정리하고 있습니다.

0개의 댓글