자바 - 스트림의 연산, 스트림의 최종 연산 forEach()
자바 - 스트림의 연산, forEach()에 대해서 알아보자.
스트림의 연산
스트림이 제공하는 다양한 연산을 이용하면 복잡한 작업들을 간단히 처리할 수 있다. 스트림에 정의된 메소드 중에서 데이터 소스를 다루는 작업을 수행하는 것을 연산(operation)이라고 한다.
스트림이 제공하는 연산은 중간 연산과 최종 연산으로 분류할 수 있는데, 중간 연산은 연산결과를 스트림으로 반환하기 때문에 중간 연산을 연속해서 연결할 수 있다. 반면에 최종 연산은 스트림의 요소를 소모하면서 연산을 수행하므로 단 한번만 연산이 가능하다.
- 중간 연산 : 연산 결과가 스트림인 연산. 스트림에 연속해서 중간 연산할 수 있음
- 최종 연산 : 연산 결과가 스트림이 아닌 연산. 스트림의 요소를 소모하므로 단 한번만 가능
stream.distinct().limit(5).sorted().forEach(System.out::println) ( - : 중간연산 / - :최종연산)
모든 중간 연산의 결과는 스트림이지만, 연산 전의 스트림과 같은 것은 아니다.
스트림의 최종 연산 forEach()
최종 연산은 스트림의 요소를 소모해서 결과를 만들어 낸다. 그래서 최종 연산 후에 스트림은 닫히게 되고 더 이상 사용할 수 없다. 최종 연산의 결과는 스트림 요소의 합과 같은 단일 값이거나, 스트림의 요소가 담긴 배열 또는 컬렉션일 수 있다.
forEach()는 peek()와 달리 스트림의 요소를 소모하는 최종 연산이다. 반환 타입이 void이므로 스트림의 요소를 출력하는 용도로 많이 사용된다.
void forEach(Consumer <? super T> action)
확장된 for문이라고도 하며 for( 타입 변수명 : 배열 또는 컬렉션 ) {} 으로도 사용된다. 해당 foreEach문을 사용할 때는 람다식을 사용해서 작성해야 한다.
List<String> fruit = new ArrayList<>();
fruit.add("apple");
fruit.add("banana");
//확장 for문
for (String i : fruit){
System.out.println(i);
}
//forEach 함수
fruit.forEach( i -> System.out.println(i));