myeongjaechoi 2025. 2. 23. 15:54

Stream

  • 원본 데이터 소스를 변경 X -> 읽기 전용
  • 병렬 처리 용이 -> 멀티쓰레드 사용
    List<Integer> integerList = Arrays.asList(1, 2, 3);
    integerList.stream()
            .filter(n -> n < 3)
            .forEach(System.out::println);
}

filter

  • 스트림의 각 요소에 대해 조건을 평가
  • 조건이 'true'인 경우 해당 요소는 스트림에 남고, 'false'인 경우 제외
  • 위 예시
    • 리스트의 각 요소 'n'에 대해 조건 'n < 3'을 평가
    • 조건이 참인 요소만 다음 단계로 전달(forEach)
    • 1, 2 참 3 거짓

forEach

  • 스트림의 종료 연산으로, 스트림의 각 요소에 대해 특정 작업을 수행
  • 스트림의 모든 요소를 순회하며 주어진 동작을 실행
  • 반환값이 없다.
  • 위 예시
    • 필터링된 결과인 1, 2 가 각각 출력된다.
    List<String> stringList = Arrays.asList("1", "2", "3");
    stringList.stream()
            .map(Integer::parseInt)
            .forEach(System.out::println);
}

map

  • 스트림 내 각 요소들을 특정 값으로 변환하는 작업
  • 값을 변환하기 위한 람다를 인자로 받음
  • 위 예시
    • Integer 자료형의 1,2,3
List<String> stringList = Arrays.asList("3", "2", "1");

List<Integer> sortedNumbers = stringList.stream()
        .map(Integer::parseInt)
        .sorted()
        .toList();

System.out.println(sortedNumbers);

sorted() 정렬

  • 오름차순으로 정렬 수행
  • 위 예시
    • 1, 2, 3으로 정렬된 sortedNumbers가 만들어진다.
List<String> stringList = Arrays.asList("3", "2", "1");

int sum = stringList.stream()
                .map(Integer::parseInt)
                        .reduce(0,Integer::sum);

System.out.println(sum);

reduce()

  • 요소 누적 연산
  • 위 예시
    • 초기값을 0으로 하고, 각 요소를 더한다.
    • 결과 6
public static double calculate(List<Double> operands, Operation operator) {
    return operands.stream().reduce(operator::calculate).orElseThrow(() ->
            new IllegalArgumentException(MUST_CHANGE_NUMBER.getMessage()));
}
  • 각 요소의 operands가 operator의 calculate 메서드를 실행
  • 스트림이 비어있지 않으면, operands의 첫번째 요소가 초기값으로 이용
  • 결과를 반환