Java 8 Stream findFirst findAny 차이
1. 소개
Java 8 Stream API에는 두 가지 메소드 인 findAny () 및 findFirst () 설명하겠습니다.
2. Stream.findAny () 사용
이름에서 알 수 있듯이 findAny () 메소드를 사용하면 Stream 에서 어떤 요소를 찾을 수 있습니다 . 순서에 주의를 기울이지 않고 요소를 찾을 때 사용하십시오.
이 메서드는 Stream 이 비어 있는 경우 비어 있는 Optional 인스턴스를 반환합니다 .
@Test
public void createStream_whenFindAnyResultIsPresent_thenCorrect() {
List<String> list = Arrays.asList("A","B","C","D");
Optional<String> result = list.stream().findAny();
assertTrue(result.isPresent());
assertThat(result.get(), anyOf(is("A"), is("B"), is("C"), is("D")));
}
병렬이 아닌 작업에서는 Stream 의 첫 번째 요소를 반환 할 가능성이 높지만 이에 대한 보장은 없습니다 .
병렬 작업을 처리 할 때 최대 성능을 얻으려면 결과를 확실하게 확인할 수 없습니다.
@Test
public void createParallelStream_whenFindAnyResultIsPresent_thenCorrect()() {
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Optional<Integer> result = list
.stream().parallel()
.filter(num -> num < 4).findAny();
assertTrue(result.isPresent());
assertThat(result.get(), anyOf(is(1), is(2), is(3)));
}
3. Stream.findFirst () 사용
로 findFirst () 메소드는 첫 번째 요소 발견 스트림. 분명히이 방법은 시퀀스에서 첫 번째 요소를 구체적으로 원할 때 사용됩니다.
발생 순서가 없으면 Stream 에서 요소를 반환합니다 . java.util.streams의 패키지 문서는 말합니다 :
스트림은 정의 된 갖거나 갖지 않을 수 있습니다 . 소스와 중간 작업에 따라 다릅니다.
반환 유형은 또한 스트림 이 비어 있는 경우 비어 있는 선택적 인스턴스입니다 .
@Test
public void createStream_whenFindFirstResultIsPresent_thenCorrect() {
List<String> list = Arrays.asList("A", "B", "C", "D");
Optional<String> result = list.stream().findFirst();
assertTrue(result.isPresent());
assertThat(result.get(), is("A"));
}
findFirst 메소드 의 동작은 병렬 시나리오에서 변경되지 않습니다. 조우 순서가 존재하면 항상 결정 론적으로 작동합니다.
4. 결론
이 학습서에서는 Java 8 Streams API 의 findAny () 및 findFirst () 메소드를 살펴 보았습니다 . findAny () 메소드는 어떠한 요소 반환 스트림 그동안 로 findFirst () 메소드는 첫 번째 요소 반환 스트림 .
이 기사의 전체 소스 코드와 모든 코드 스 니펫은 GitHub에서 찾을 수 있습니다 .
참고
'Java' 카테고리의 다른 글
Keycloak의 로그인 페이지 사용자 정의 (0) | 2021.09.20 |
---|---|
Java 8 Stream 불변 Collection (0) | 2020.06.27 |
Java 8 groupingBy Collector 예제 (1) | 2020.06.25 |
Java 8 Collectors 베스트 예제 (0) | 2020.06.24 |
Java 8 Functional Interfaces (0) | 2020.06.22 |