본문 바로가기
Java

[Java] - Stream API ⓛ forEach() 사용법 정리

by 개발 고양이 2025. 2. 15.

forEach() 란?

자바8에서 Stream이 도입되면서 등장한 메서드로, 리스트, 배열과 같은 컬렉션 데이터를 반복할 때 사용한다.

반환 타입은 void로, 스트림의 모든 요소를 출력하는 용도로 많이 활용된다.

보통 람다식과 결합하여 많이 사용용하며, 기존의 for문에 비해 더 간결하고 가독성이 좋은 편이다.

 

forEach()는 컬렉션의 요소 전체를 하나씩 꺼내서 반복하며,  Stream API의 3단계 (Stream 생성 → 중간 연산 → 최종 연산) 중에서 최종 연산에 속한다. 따라서 이후에 다른 최종 메서드를 호출해서는 안된다. (count()와 같은..)


forEach() 메서드 사용 예시 ⓛ 람다식

for문을 스트림 API의 forEach() 메서드를 사용하여 바꿔보자! 

 

기존의 for문으로 list를 순회하는 코드는 아래와 같다.

import java.util.ArrayList;
import java.util.List;

public class Main {
	public static void main(String[] args) {
    	List list = new ArrayList<String>();
        
        list.add("A");
        list.add("B");
        list.add("C");
        
        // for문으로 List 순회하기
        for(int i=0; i<list.size(); i++){
		System.out.println(list.get(i));
        }
    }
}

위 코드를 실행하면, A, B, C가 순서대로 한줄씩 출력된다.

 

List 순회 코드를 스트림 API를 활용한 방법으로 바꿔보자.

import java.util.ArrayList;
import java.util.List;

public class Main {
	public static void main(String[] args) {
    	List list = new ArrayList<String>();
        
        list.add("A");
        list.add("B");
        list.add("C");
        
        // Stream API의 forEach문으로 List 순회하기
	list.stream().forEach(str -> System.out.println(str);
    }
}

for문에 비해 코드가 간결해진 것을 확인할 수 있다. 


 

아래는 중간 연산인 filer() 메서드를 활용하여 리스트를 필터링한 결과를 forEach()로 출력하는 예제이다.

import java.util.List;

public class StreamForEachEx {
    public static void main(String[] args) {
        List<String> fruits = List.of("Apple", "Banana", "Orange");

        fruits.stream() // 1. Stream 객체 생성
             .filter(name -> name.startsWith("A")) // 2. 중간 연산 "A"로 시작하는것만 필터링
             .forEach(System.out::println); // 3. forEach를 수행하여 출력
    }
}

(filer 사용법에 대한 자세한 내용은 이후 포스팅하도록 하겠다 :) )

 


참고

list.forEach(s -> System.out.println(s));

list.forEach(System.out::println);

위 2줄은 같은 기능을 하는 코드이다!

"->" 연산자를 사용하지 않고 "::"로 더 간결하게 List에 접근 가능한, 람다 표현식과 함께 자주 쓰이는 Java 문법이므로 알아두면 유용하다.

'Java' 카테고리의 다른 글

[Java] - 스트림(Stream) API란?  (0) 2025.02.14
[Java] - 람다 표현식(Lamda expression)  (0) 2025.02.13
[Java] - ArrayList 기본 사용법  (0) 2024.07.10
[Java] - 컬렉션(Collection) 이란?  (0) 2024.07.04