Java - 스트림(Stream)

HY SONG·2023년 3월 16일
0

Java

목록 보기
11/15

스트림(Stream)이란?

배열 및 컬렉션 데이터를 처리하고 조작하기 위한 강력한 도구를 제공하는 API이다
함수형 프로그래밍과 람다 표현식을 활용하여 데이터를 처리하는 방법을 제공한다

스트림의 장점

하나의 통합된 방식으로 데이터를 다룰 수 있게 된다

스트림의 특징

  1. 처리 과정은 생성, 중간 연산, 최종 연산 세 단계의 파이프라인으로 구성
  2. 원본 데이터 소스를 변경하지 않는다(read-only)
  3. 일회용이다(onetime-only)
  4. 내부 반복자이다

스트림 생성

배열 스트림 생성

Arrays 클래스의 stream() 메서드 또는 Stream 클래스의 of() 메서드를 사용

Stream<String> stream = Arrays.stream(arr);
Stream<String> stream = Stream.of("갑", "을", "병");

컬렉션 스트림 생성

stream() 메서드를 사용

Stream<Integer> stream = list.stream();

스트림 중간 연산

스트림의 요소를 변환하거나 필터링하고, 새로운 스트림을 반환하는 작업을 수행한다

  • filter(Predicate<T> predicate)
    스트림의 요소 중 주어진 조건을 만족하는 요소만을 선택하여 새로운 스트림을 생성
	Stream<Integer> numbers = Stream.of(1, 2, 3, 4, 5);
	Stream<Integer> evenNumbers = numbers.filter(n -> n % 2 == 0);
  • map(Function<T, R> mapper)
    스트림의 각 요소를 주어진 함수에 따라 변환하여 새로운 스트림을 생성
	Stream<String> names = Stream.of("Alice", "Bob", "Charlie");
	Stream<Integer> nameLengths = names.map(name -> name.length());
  • distinct()
    스트림의 중복 요소를 제거한 새로운 스트림을 반환
	Stream<String> colors = Stream.of("red", "green", "blue", "red");
	Stream<String> distinctColors = colors.distinct(); // 결과: "red", "green", "blue"
  • sorted()
    스트림의 요소를 기본 정렬 순서(Comparable 인터페이스를 구현한 객체의 경우) 또는 주어진 비교자(Comparator)에 따라 정렬한 새로운 스트림을 반환
	Stream<Integer> numbers = Stream.of(5, 2, 4, 1, 3);
	Stream<Integer> sortedNumbers = numbers.sorted(); // 결과: 1, 2, 3, 4, 5
  • limit(long maxSize) 및 skip(long n)
    limit는 스트림에서 처음부터 주어진 개수만큼 요소를 선택하고, skip은 처음부터 주어진 개수만큼 요소를 건너뛴 후 나머지 요소로 이루어진 새로운 스트림을 반환
	Stream<Integer> numbers = Stream.of(1, 2, 3, 4, 5);
	Stream<Integer> limitedNumbers = numbers.limit(3); // 결과: 1, 2, 3
	Stream<Integer> skippedNumbers = numbers.skip(2);   // 결과: 3, 4, 5

스트림 최종 연산

스트림 파이프라인의 끝에 위치하며, 스트림을 종료하고 최종 결과를 생성하거나 출력하는 작업을 수행한다

  • forEach(Consumer action)
    각 요소에 대해 주어진 동작(Consumer)을 수행한다
    주로 스트림의 요소를 출력하거나 다른 작업을 수행하는 데 사용된다
	Stream<String> names = Stream.of("Alice", "Bob", "Charlie");
	names.forEach(System.out::println); // 각 이름을 출력
  • toArray()
    스트림의 요소를 배열로 변환하여 반환
	Stream<Integer> numbers = Stream.of(1, 2, 3, 4, 5);
	Integer[] numberArray = numbers.toArray();
  • reduce()
    스트림의 요소를 결합하여 단일 값을 반환합니다. reduce 연산은 초기값과 바이너리 연산자를 사용하여 요소를 축소하거나 조합합니다.
	Stream<Integer> numbers = Stream.of(1, 2, 3, 4, 5);
	int sum = numbers.reduce(0, (x, y) -> x + y); // 모든 숫자를 합산
  • collect(Collector<T, A, R> collector)
    스트림의 요소를 컬렉션이나 다른 자료구조로 수집하거나 그룹화한 후 결과를 반환
	Stream<String> names = Stream.of("Alice", "Bob", "Charlie");
	List<String> nameList = names.collect(Collectors.toList()); // 리스트로 수집
  • min(Comparator comparator) 및 max(Comparator comparator)
    스트림의 요소 중 가장 작은 또는 가장 큰 요소를 찾아 반환
	Stream<Integer> numbers = Stream.of(3, 1, 4, 1, 5, 9, 2, 6);
	int min = numbers.min(Integer::compareTo).orElse(0); // 최솟값
	int max = numbers.max(Integer::compareTo).orElse(0); // 최댓값

0개의 댓글