Java

Java 8 Stream findFirst findAny 차이

기록만이살길 2020. 6. 21. 22:10
반응형

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에서 찾을 수 있습니다 .

참고

https://www.baeldung.com/java-stream-findfirst-vs-findany

반응형

'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