Java/코딩테스트

[JAVA] 배열 Stream 활용해서 풀기

_JHS_ 2025. 1. 20. 16:24

배열 문제에서 Stream 활용

 

1. 배열 내에 'target' 값이 몇 개 포함 되어있는지 카운트 => filter(), count() 사용

int[] arr = {1,1,3,3,4};

long count = Arrays.stream(arr) // 배열을 Stream으로 변환
    .filter(num -> num == 3)    // 3과 같은 숫자만 필터링
    .count();                   // 필터링된 요소 개수를 카운트
    
System.out.println(cnt) // 출력: 2
/* 
long cnt = IntStream.of(arr)
    .filter(num -> num == 3)
    .count();
 */

 

 

2. 배열 내에 target 값보다 작은 수를 모두 찾아 배열로 만들기 => filter(), toArray() 사용

int[] arr = {1,1,2,3,4,5};

int[] answer = Arrays.stream(arr)
        .filter(num -> num < 4)
        .toArray();
        
for(int ans : answer){
    System.out.print(ans + " "); // 출력: 1 1 2 3 
}

 

 

3. 배열 내에서 최댓값, 최솟값 구하기 => max(), min(), orElse() 사용

int[] arr = {1,1,2,3,4,5};

int max = Arrays.stream(arr).max().orElse(-1);
int min = Arrays.stream(arr).min().orElse(-1);
        
System.out.print(max); // 출력: 5
System.out.print(min); // 출력: 1

 

 

4. 배열 내에서 원하는 값 index 찾기 => IntStream.range(), filter(), findFirst(), orElse() 사용

int arr = {1,45,31,2,5};
int target = 31;

int index = IntStream.range(0, arr.length) // 인덱스 범위 생성
        .filter(i -> arr[i] == max)    // 조건 필터
        .findFirst()                     // 첫 번째 인덱스 반환
        .orElse(-1);                     // 값이 없으면 -1 반환

System.out.println(index); // 출력: 2

 

 

5. 배열 내에서 중복된 값 제거 => distinct(), toArray() 사용

int[] arr = {1,1,2,3,3,4};

int[] newArr = Arrays.stream(arr).distinct().toArray();

for(int n:newArr)  System.out.print(n + " "); // 출력: 1 2 3 4

 

 

6. 배열 값에 반복적으로 연산하기 => map(), toArray() 사용

 int[] arr = {1,1,2,2,2,8};
 
 int[] newArr = Arrays.stream(arr).map(i -> i-1).toArray();
 
 for(int n : newArr){
 	System.out.print(n + " "); // 출력 : 0 0 1 1 1 7
 }