forEach()
스트림 내 요소를 매개변수 내용을 실행.
void forEach(Comsumer<? super T> action)
조건 검사 - allMatch(), anyMatch() ,noneMatch(), findFirst(), findAny()
스트림의 요소에 대해 지정된 조건에 요소가 일치하는지 확인하는데 사용할 수 있는 메서드들이다.
모두 매개변수로 Predicate를 요구하며, 연산결과로 boolean을 반환한다.
Predicate 참조
메서드 | 설 명 |
boolean allMatch(Predicate<? super T> predicate) | 모든 요소가 일치하는지 확인. |
boolean anyMatch(Predicate<? super T> predicate) | 매치하는 것이 있는지 확인. |
boolean noneMatch(Predicate<? super T> predicate) | 매치하는게 없는지 확인. |
Optional<T> findFirst(Predicate<? super T> predicate) | 조건에 일치하는 첫 번째 것을 반환. |
Optional<T> findAny(Predicate<? super T> predicate) |
병렬스트림에서 조건에 일치하는 것을 반환. |
통계 - count(), sum(), average(), max(), min()
IntStream과 같은 기본형 스트림에서 정보를 얻을 수 있는 메서드들이다.
2022.03.16 - [Language/Java] - [Java] 자바 스트림(stream) 사용법 2 - 스트림의 중간연산, Optional
기본형 스트림이 아니면 count(), max(), min() 3개뿐이다.
리듀싱 - reduce()
스트림의 요소를 줄여나가면서 연산을 수행하고 최종결과를 반환한다.
처음 두 요소를 가지고 연산한 결과를 가지고 그 다음 요소와 연산한다.
스트림의 모든 요소를 소모하게 되면 그 결과를 반환한다.
연산결과의 초기값을 가지는 reduce()도 있는데, 이 메서드들은 초기값과 스트림의 첫번 째 요소로 연산을 시작한다.
스트림의 요소가 하나도 없는 경우, 초기값이 반환되므로 반환타입이 T이다.
int count = intStream.reduce( 0 , (a,b) -> a + 1 );
int sum = intStream.reduce( 0 , (a,b) -> a + b );
import java.util.*;
import java.util.stream.*;
class StreamEx5 {
public static void main(String[] args) {
String[] strArr = {
"Inheritance", "Java", "Lambda", "stream",
"OptionalDouble", "IntStream", "count", "sum"
};
Stream.of(strArr).forEach(System.out::println);
boolean noEmptyStr = Stream.of(strArr).noneMatch(s->s.length()==0);
Optional<String> sWord = Stream.of(strArr)
.filter(s->s.charAt(0)=='s').findFirst();
System.out.println("noEmptyStr="+noEmptyStr);
System.out.println("sWord="+ sWord.get());
// Stream<String[]>을 IntStream으로 변환
IntStream intStream1 = Stream.of(strArr).mapToInt(String::length);
IntStream intStream2 = Stream.of(strArr).mapToInt(String::length);
IntStream intStream3 = Stream.of(strArr).mapToInt(String::length);
IntStream intStream4 = Stream.of(strArr).mapToInt(String::length);
int count = intStream1.reduce(0, (a,b) -> a + 1);
int sum = intStream2.reduce(0, (a,b) -> a + b);
OptionalInt max = intStream3.reduce(Integer::max);
OptionalInt min = intStream4.reduce(Integer::min);
System.out.println("count="+count);
System.out.println("sum="+sum);
System.out.println("max="+ max.getAsInt());
System.out.println("min="+ min.getAsInt());
}
}
//결과
Inheritance
Java
Lambda
stream
OptionalDouble
IntStream
count
sum
noEmptyStr=true
sWord=stream
count=8
sum=58
max=14
min=3
참조
'Java의 정석' 책
'Language > Java' 카테고리의 다른 글
[Java] Java 버전별 특징 : Java 12 (Switch Expressions with yield, G1GC 개선, 더 빠른 시작시간 및 메모리 최적화) (0) | 2024.10.05 |
---|---|
[Java] Garbage Collection(GC) 가비지 컬렉션 (0) | 2022.04.03 |
[Java] 자바 스트림(stream) 사용법 2 - 스트림의 중간연산, Optional (0) | 2022.03.16 |
[Java] 자바 스트림(stream) 사용법 1 - 특징과 생성 (0) | 2022.03.16 |
[Java] 람다식(Lambda expression)과 함수형 인터페이스(Functional Interface) (0) | 2022.03.16 |
댓글