[Java] 스트림 요소 처리 - 루핑

Bam·2024년 3월 20일
0

Java

목록 보기
83/98
post-thumbnail

루핑

루핑(looping)은 스트림에서 요소를 하나씩 가져와서 처리하는 기능입니다.

루핑이라는 단어는 지금 처음 등장했는데 사실은 아주 익숙한 메소드입니다. 왜냐하면 지금까지 스트림의 기초부터 기능까지 소개하면서 계속 나온 forEach()가 바로 루핑 메소드이기 때문입니다.

루핑 메소드는 peek()forEach()가 있는데요. 기능은 동일하지만 peek()는 중간 처리 메소드이고, forEach()는 최종 처리 메소드입니다. 따라서 peek()를 사용할 때는 최종 처리 메소드를 붙여줘야한다는 것을 반드시 기억해주세요.

메소드설명
peek(Consumer)전달된 요소를 반복 처리
최종 처리가 아니므로 스트림을 반환
forEach(Consumer)전달된 요소를 반복 처리
최종 처리이므로 반환값 타입은 void

Consumer는 함수형 인터페이스로 accept()라는 추상 메소드를 가지고 있습니다. accept()는 매개변수로 받은 값을 처리하는 메소드입니다. 이를 람다식으로 표현하면 다음과 같습니다.

T -> {
	//실행 코드
}

forEach()는 많이 썼으니 peek()를 이용해서 중간 처리하는 예제 코드를 하나 만들었습니다.

public class Main {
    public static void main(String[] args) {
        int[] arr = { 1, 2, 3, 4, 5 };
        IntStream stream = Arrays.stream(arr);

        int sum = stream.map(elem -> elem *= 10)
                .peek(elem -> System.out.println(elem))
                .sum();

        System.out.println("요소 총합: " + sum);
    }
}

map()으로 요소에 10을 곱해줍니다. 그리고 곱해진 요소를 확인하기 위해 peek()로 하나씩 출력합니다. 마지막으로 최종 처리 메소드인 sum()으로 총합을 구하는 코드입니다.

0개의 댓글