[JAVA] Java 알고리즘 문제 풀이 시, 자주 쓰이는 Steam API 함수들

알고리즘 문제풀이 시, 코드를 예쁘고 빠르게 만들어주는 Steam API를 정리해보았습니다.


자주 쓰이는 Stream API 함수들

1. 배열 → 스트림

  • Arrays.stream(arr) : int[], double[], long[] 같은 primitive 배열을 스트림으로 변환
  • Stream.of(array) : String[] 같은 객체 배열을 스트림으로 변환

예:

int[] arr = {1, 2, 3};
Arrays.stream(arr).forEach(System.out::println);

String[] strArr = {"1", "2", "3"};
Stream.of(strArr).forEach(System.out::println);

2. 형 변환 (Mapping)

  • mapToInt(Integer::parseInt) : 문자열 스트림 → 정수 스트림
  • map(String::length) : 문자열 스트림 → 문자열 길이 스트림

예:

String[] arr = {"1", "2", "3"};
int[] intArr = Arrays.stream(arr).mapToInt(Integer::parseInt).toArray();

3. 집계 연산 (Aggregation)

  • .min().getAsInt() / .max().getAsInt() : 최솟값 / 최댓값
  • .sum() : 합계
  • .average().getAsDouble() : 평균

예:

int[] arr = {1, 2, 3, 4};
int min = Arrays.stream(arr).min().getAsInt();
int max = Arrays.stream(arr).max().getAsInt();

4. 정렬 / 수집

  • .sorted() : 정렬
  • .toArray() : 배열로 다시 변환
  • .collect(Collectors.toList()) : 리스트로 변환

예:

String[] arr = {"3", "1", "2"};
List<Integer> list = Arrays.stream(arr)
        .map(Integer::parseInt)
        .sorted()
        .collect(Collectors.toList());

5. forEach / joining

  • .forEach(System.out::println) : 요소 출력
  • .collect(Collectors.joining(" ")) : 문자열 합치기

예:

String[] arr = {"a", "b", "c"};
String result = Arrays.stream(arr)
        .collect(Collectors.joining(", "));  // "a, b, c"

🎯 이 문제를 Stream으로 풀면 이렇게도 가능

public String solution(String s) {
    IntSummaryStatistics stats = Arrays.stream(s.split(" "))
            .mapToInt(Integer::parseInt)
            .summaryStatistics();  // count, min, max, sum, average 한번에

    return stats.getMin() + " " + stats.getMax();
}

👉 IntSummaryStatistics를 쓰면 최소값/최대값/합계/평균을 다 구할 수 있어서 깔끔!


💡 정리 비슷한 문제에서 빠르게 풀고 싶으면 최소한 아래 3개는 꼭 익혀두자:

  1. mapToInt(Integer::parseInt)
  2. min() / max() / sum() / average()
  3. summaryStatistics()