Spring(2023-05-08)

권단비·2023년 5월 8일
0

IT

목록 보기
132/139

[스트림]

// 스트림의 이해
// 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

0개의 댓글