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 |