본문 바로가기
Java/Java

[Java] 최종 연산

by 기록하는_사람 2022. 10. 21.

최종 연산 - sum(), count(), average(), min(), max()

📌 최종 연산

① sum( )

② count( )

③ average( )

④ min( )

⑤ max( )

: IntStream, DoubleStrem, LongStream형 참조변수가 참조하는 스트림을 대상으로만 연산 가능. 

 

📌 최종 연산을 하는 순간, 파이프라인의 마지막을 통과하기 때문에 

      위의 연산을 사용하려면 매번 스트림을 생성해야 함. 

 

📄 StreamTest.java

package stream3;

import java.util.stream.IntStream;

public class StreamTest {

	public static void main(String[] args) {
		// sum()
		int sum = IntStream.of(1, 2, 3, 4, 5)
			 	   .sum();
		System.out.println(sum);  // 15

		// count()
		long cnt = IntStream.of(1, 2, 3, 4, 5)
			            .count();
		System.out.println(cnt);  // 5
		
		// average()
		IntStream.of(1, 2, 3, 4, 5)
				 .average()
				 .ifPresent(r -> System.out.println(r));  // 3.0

		// min()
		IntStream.of(1, 2, 3, 4, 5)
				 .min()
				 .ifPresent(r -> System.out.println(r));  // 1

		// max()
		IntStream.of(1, 2, 3, 4, 5)
				 .max()
				 .ifPresent(r -> System.out.println(r));  // 5
	}

}

 

최종 연산 - allMatch, anyMatch, noneMatch

📌 allMatch

: 스트림의 데이터가 조건을 모두 만족하는 지에 대한 결과 반환.

boolean allMatch(Predicate<? super T> predicate)

 

📌 anyMatch

: 스트림의 데이터가 조건을 하나라도 만족하는 지에 대한 결과 반환.

boolean anyMatch(Predicate<? super T> predicate)

 

📌 noneMatch

: 스트림의 데이터가 조건을 하나도 만족하는 지 않는 지에 대한 결과 반환.

boolean noneMatch(Predicate<? super T> predicate)

 

최종 연산 - collect

📌 collect

: 파이프라인을 통해 가공되고 걸러진 데이터를 최종 연산 과정에서 별도로 저장할 때 사용.

<R> collect(Supplier<R> supplier,
            BiConsumer<R, ? super T> accumulator,
            BiConsumer<R, R> combiner)

 

📄 CollectStreamTest.java

package stream3;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

public class CollectStreamTest {

	public static void main(String[] args) {
		String[] words = {"apple", "banana", "cherry", "pear", "watermelon"};
		Stream<String> ss = Arrays.stream(words);
		
		List<String> ls = ss.filter(s -> s.length() > 5)
				            .collect(() -> new ArrayList<>(), 
				                     (c, s) -> c.add(s),
				                     (li1, li2) -> li1.addAll(li2));
		
		System.out.println(ls);  // [banana, cherry, watermelon]
	}

}

+ 추가 설명

더보기

- .collect(() -> new ArrayList<>() 

  → 데이터 저장할 저장소 생성. 


- (c, s) -> c.add(s),

   c : collect의 첫 번째 인자를 통해 생성된 컬렉션 인스턴스.

      s : 스트림을 이루는 데이터들.

      컬렉션 인스턴스에 스트림의 데이터 저장됨.


- (li1, li2) -> li1.addAll(li2))

   순차 스트림의 경우, 사용되지 않음.

       세 번째 인자로 null을 사용하는 경우, NullPointerException 예외가 발생함.

       병렬 스트림에서 세 번째 인자는 데이터를 하나로 묶는 과정에 사용됨.

 

댓글