Java - 스트림

c.Hano·2024년 12월 4일

자바

목록 보기
13/17

조건문과 반복문의 최신 유행?


컬렉션(리스트, 배열 등)의 데이터를 처리하는데 사용된다.

스트림은 필터링(filter()), 변환(map()), 정렬(toArray()), 집계(collect())와 같은 작업을 간결하게 처리할 수 있도록 설계되었다.

예제

// 숫자 리스트의 각 요소 출력

import java.util.*;

public class StreamExample {
    public static void main(String[] args) {
        // 1. 숫자 리스트 생성
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); 
        // Arrays.asList(): 배열을 리스트로 변환.

        // 2. 스트림 생성 및 처리
        numbers.stream()                     // 리스트에서 스트림 생성
               .forEach(n -> System.out.println(n)); // 각 요소를 출력하는 람다 표현식.

        // 출력: 1 2 3 4 5 (각 숫자가 줄바꿈 되어 출력됩니다)
    }
}
  • stream() : 컬렉션(List, Set 등)에서 스트림을 생성한다.
  • forEach() : 스트림의 각 요소에 대해 반복하여 작업을 수행한다.

스트림의 주요 연산

스트림 연산은 두가지로 나뉜다.

  • 중간 연산 : 스트림을 변환하거나, 필터링하는 연산 (filter, map)
  • 최종 연산 : 스트림의 데이터를 소비하여 결과를 반환 (forEach, collect)
// 조건에 맞는 숫자 필터링

import java.util.*;

public class StreamExample {
    public static void main(String[] args) {
        // 1. 숫자 리스트 생성
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

        // 2. 스트림에서 짝수만 필터링
        numbers.stream()                      // 리스트에서 스트림 생성
               .filter(n -> n % 2 == 0)       // 짝수만 필터링하는 람다 표현식
               .forEach(n -> System.out.println(n)); // 결과 출력

        // 출력: 2 4
    }
}
  • filter() : 스트림의 각 요소를 조건에 따라 걸러낸다.
    - n -> n%2 ==0 ; ((int n) -> {n % 2 == 0} 과 동일)
// 요소 변환 (맵핑)

import java.util.*;

public class StreamExample {
    public static void main(String[] args) {
        // 1. 문자열 리스트 생성
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

        // 2. 각 문자열을 대문자로 변환
        names.stream()                         // 리스트에서 스트림 생성
             .map(name -> name.toUpperCase())  // 각 이름을 대문자로 변환
             .forEach(name -> System.out.println(name)); // 결과 출력

        // 출력: ALICE BOB CHARLIE
    }
}
  • map(): 스트림의 각 요소를 다른 값으로 변환한다.
    - name -> name.toUpperCase() name안의 값들을 모두 대문자로 변경
    - 기존의 타입을 다른 인스턴스타입으로 바꾸고 싶을 경우 mapToObj 반대의 경우 mapTo기본형 을 사용한다.
    - ex. .mapToInt(Integer::parseInt)
// 결과 수집

import java.util.*;
import java.util.stream.Collectors;

public class StreamExample {
    public static void main(String[] args) {
        // 1. 숫자 리스트 생성
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

        // 2. 짝수만 필터링하여 리스트로 수집
        List<Integer> evens = numbers.stream()           // 스트림 생성
                                     .filter(n -> n % 2 == 0) // 짝수만 필터링
                                     .collect(Collectors.toList()); // 결과를 리스트로 수집

        // 3. 결과 출력
        System.out.println(evens); // 출력: [2, 4]
    }
}
  • collect() : 스트림의 결과를 특정 컬렉션(List, Set 등)으로 수집.
    - Collectors.toList() : 결과를 리스트로 변환
profile
꼬질이

0개의 댓글