[JAVA] 코딩테스트 stream 사용

세하·2025년 5월 22일

JAVA

목록 보기
15/17

stream

Java의 Stream은 배열이나 컬렉션을 처리할 때 함수형 스타일로 간결하고 선언적으로 코딩할 수 있게 도와주는 기능이다.

코드

예를 들어 문자열로 입력된 숫자의 연속들을 공백 기준으로 나누어 int형 배열에 저장하는 코드를 짠다고 해보자. 보통은 아래처럼 짤 것이다.

StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int[] arr = new int[N];
			
for (int i = 0; i < N; i++) {
	arr[i] = Integer.parseInt(st.nextToken());
}

만약 stream을 사용한다면 한 줄에 끝낼 수 있다.

int[] arr = Arrays.stream(br.readLine().split(" "))
				  .mapToInt(Integer::parseInt)
                  .toArray();

순서별로 나눠서 설명해보자면

  1. br.readLine() : 한 줄 입력 받기 (예: "3 4 5 2 7")

  2. .split(" ") : 공백 기준으로 나누기 -> String[] 배열로 만듦 (["3", "4", "5", "2", "7"])

  3. Arrays.stream(...) : 배열을 Stream으로 변환해주어 반복 처리가 가능해진다.

  4. .mapToInt(Integer::parseInt) : 각 문자열을 int로 바꿔준다 (String -> int)

  5. .toArray() : int[] 형태의 배열로 다시 반환한다.

⚠️단점

Stream은 반복문보다 성능이 느릴 수 있음
람다 내부에서는 디버깅, 예외 던지기가 불편함
for문이 훨씬 직관적임(가독성의 문제)

따라서 코딩테스트 시에는 입력파싱 정도는 stream으로 처리해도 괜찮지만 그 이후 로직들은 for문으로 짜는게 좋을 것 같다!

0개의 댓글