최종 연산 - 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 예외가 발생함.
병렬 스트림에서 세 번째 인자는 데이터를 하나로 묶는 과정에 사용됨.
'Java > Java' 카테고리의 다른 글
[Java] I/O 스트림 (0) | 2022.10.22 |
---|---|
[Java] 예외 처리 (0) | 2022.10.22 |
[Java] 중간 연산 - 정렬과 루핑(Looping) (0) | 2022.10.21 |
[Java] 리덕션(Reduction)과 병렬 스트림(Parallel Streams) (0) | 2022.10.21 |
[Java] 중간 연산 - 필터링(Filtering)과 맵핑(Mapping) (0) | 2022.10.21 |
댓글