본문 바로가기

언어공부/Java

자바 - 스트림의 연산, 스트림의 최종 연산 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));

 

 

 

실행화면

 


 

실행화면

 


 

실행화면