자바 스트림(Stream)

최민수·2023년 3월 6일
0

프로그래밍 언어

목록 보기
2/14

스트림이란?

  • 배열이나 컬렉션에 대해 요소들을 반복적으로 참조하는 처리를 도와주는 기능이다.
    for문이나 분기처리를 깔끔하게 해줘서 직관적인 코드를 쓸 수 있게 해준다.

알고 있으면 유용한 스트림 문법에 대해 예시로 알아보도록 하자.

IntStream, forEach

상황) 1~10까지 숫자를 출력하는 경우

import java.util.stream.IntStream;

class Main {
    public static void main(String[] args) {
        // 일반적인 방법
        for (int i = 1; i <= 10; i++) {
            System.out.println(i);
        }

        // 스트림
        IntStream.rangeClosed(1, 10)
                .forEach(e -> {
                    System.out.println(e);
                });

        // 스트림 - 축약 버전
        IntStream.rangeClosed(1, 10)
                .forEach(e -> System.out.println(e));

        // 스트림 - 메서드 축약 람다식
        IntStream.rangeClosed(1, 10)
                .forEach(System.out::println);
    }
}

Map

상황: 배열의 요소에 2씩 곱하기

import java.util.Arrays;

class Main {
    public static void main(String[] args) {
        // 일반적인 방법
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

        for (int i = 0; i < arr.length; i++) {
            arr[i] *= 2;
        }

        System.out.println(Arrays.toString(arr));

        // 스트림
        arr = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

        resultArr = Arrays.stream(arr)
                .map(e -> e * 2) // 이런식으로 줄여쓸 수 있다.
                .toArray();

        System.out.println(Arrays.toString(arr));
        System.out.println(Arrays.toString(resultArr));
    }
}

Filter, Collect

상황: 배열의 원소에서 홀수들은 없애고 나머지에 2씩 곱하기

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

class Main {
    public static void main(String[] args) {
        // 일반적인 방법
        int[] arr = {33, 2, 55, 4, 51, 6, 71, 18, 29, 10};

        List<Integer> resultAl = new ArrayList<>();

        // 조건
        for (int n : arr) if (n % 2 == 0) resultAl.add(n);
        for (int i = 0; i < resultAl.size(); i++) {
            int newValue = resultAl.get(i) * 2;
            resultAl.set(i, newValue);
        }

        System.out.println(resultAl);

        // 스트림
        arr = new int[]{33, 2, 55, 4, 51, 6, 71, 18, 29, 10};

        resultAl = Arrays.stream(arr)
                .filter(e -> e % 2 == 0)
                .map(e -> e * 2)
                .collect(Collectors.toList());

        System.out.println(resultAl);
    }
}
profile
CS, 개발 공부기록 🌱

0개의 댓글