스트림이란 데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소
중간연산
최종연산
.filter(Language::isJava)
.filter(i -> i % 2 == 0)
.map(Person::getAge)
.map(String::length)
.map(x -> x * 2)
스트림의 각 요소를 다른 스트림으로 만든 후, 모든 스트림을 하나의 스트림으로 연결
.flatMap(Arrays::stream)
anyMatch (적어도 하나와 일치하는지 체크) - 최종연산
.anyMatch(Language::isJava)
allMatch (모든 요소와 일치하는지 체크) - 최종연산
.allMatch(p -> p.getAge() < 30)
noneMatch (일치 요소가 없는지 체크) - 최종연산
.noneMatch(p -> p.getAge() < 30)
하나라도 거짓이면 나머지 표현식은 체크하지 않고 결과를 반환하는 상황을 뜻하는 말
anyMatch, allMatch, noneMatch, limit
등은 쇼트 서킷
findAny (임의의 요소를 반환, 랜덤) - 최종연산
.findAny()
아무 요소도 반환하지 않을 수 있으므로, null 대신 Optional<T>
을 반환
메소드
설명
isPresent()
값이 있는지 체크
ifPresent(Consumer block)
값이 있으면 주어진 블록 실행
T get()
값이 있으면 반환, 없으면 NoSuchElementException
발생
T orElse(T other)
값이 있으면 반환, 없으면 기본값 반환
int sum1 = numbers .stream ().reduce (0 , (a , b ) -> a + b );
// 초기값이 없는 경우
Optional <Integer > sum2 = numbers .stream ().reduce ((a , b ) -> a + b );
Optional <Integer > max = numbers .stream ().reduce (Integer ::max );
Stream API 를 사용할 때 발생 가능한 실수