[K-디지털 트레이닝] 학습정리 Stream (2024-10-25)

smoo·2024년 10월 25일

JAVA_STUDY

목록 보기
25/25
post-thumbnail

1. 자바 스트림에 대하여 설명하시오.

대량의 데이터를 가공해서 축소하는 것을 일반적으로 리덕션이라고 합니다.

데이터의 합계, 평균값, 카운팅, 최대값, 최소값 등이 대표적인 리덕션의 결과물이라고 볼 수 있습니다.

그러나 컬렉션의 요소를 리덕션의 결과물로 바로 집계할 수 없을 경우에는 집계하기 좋도록 필터링, 매핑, 정렬, 그룹핑 등의 중간 처리가 필요합니다.


스트림은 크게 세가지 단계에 걸쳐서 동작한다.

  1. 스트림 생성 : 스트림 인스턴스 생성.
  2. 스트림 중개 연산(스트림 변환, 가공) : 필터링(filtering) 및 맵핑(mapping) 등 원하는 결과를 만들어가는 중간 작업.
  3. 스트림 최종 연산(스트림 사용, 결과) : 최종적으로 결과를 만들어내는 작업

배열 스트림

배열 스트림은 Arrays.stream()메소드를 활용하여 생성이 가능하다.

String[] str = new String[]{"1", "2", "3", "4", "5"};
Stream<String> stream = Arrays.stream(str);
Stream<String> subStream = Arrays.stream(str, 3, 5); // 3 ~ (5-1) 요소 [4, 5]
  • 중간 처리에서는 반복, 매핑, 필터링, 정렬 등을 수행한다.
  • 최종 처리에서는 반복, 카운팅, 평균, 총합 등의 집계 처리를 수행한다.

출처 : https://luckyguystory.tistory.com/172


2. 스트림에서 중간 함수와 최종 함수의 종류와 간단한 예제를 들어 설명하시오.

① 중간 함수

  • 필터링(distinct(),filter())
  • 매핑(map(),flatMap())
  • 정렬(sorted()
  • 연산 결과 확인(peek())

② 최종 함수

  • 연산 결과 확인(forEach())
  • 매칭(match())
  • 기본 집계(sum(), count(), average(), max(), min())
  • 결과를 다른 종류로 반환(collect())
public class StreamMain {

	public static void main(String[] args) {

		int[] ar = { 1, 2, 3, 4, 5 };

		int sum = Arrays.stream(ar) // 스트림 객체로 바꾼다.
				.filter(n -> n % 2 == 1) // 중간 연산 함수
				.sum(); // 최종 함수

		System.out.println(sum);

		String[] names = { "봄", "여름", "가을", "겨울" };

		Arrays.stream(names).forEach(s -> System.out.println(s));
		
		double[] ds = {1.1,2.2,3.3,4.4};
		
		Arrays.stream(ds).forEach(d -> System.out.println(d));

		List<String> names2 = Arrays.asList("Sehoon", "Songwoo", "Chan", "Youngsuk", "Dajung");
		
		names2.stream()
				.map((name)->name.toUpperCase())
				.forEach(name -> System.out.println(name));
				
		names2.stream()
				.map((name)->name.length())
				.forEach(name -> System.out.println(name));
		
		int sum2 = names2.stream()
				.mapToInt((name)->name.length())
				.sum();
		
		System.out.println("내부에 있는 숫자들을 모두 합하면 ? " + sum2);
		
		names2.stream()
				.filter(s -> s.startsWith("S"))
				.forEach(name -> System.out.println(name));
		
		List<String> startsWithS = names2.stream()
				.filter(s -> s.startsWith("S"))
				.collect(Collectors.toList());
		
		System.out.println(
				names2.stream()
				.filter(s -> s.startsWith("S"))
				.collect(Collectors.joining(","))
		);
		
		System.out.println(startsWithS);

	}

}
profile
코딩 스터디 정리

0개의 댓글