java / / 2023. 1. 26. 09:08

java stream의 findAny와 findFirst의 차이점

java 8 stream API의 findAnyfindFirst의 차이점을 알아보자.

Stream.findAny

findAny()는 Stream에서 특정 요소를 찾는다. 순서에 상관없이 찾을 때 사용할 수 있다.

@Test
public void findAnyTest() {
  List<String> list = Arrays.asList("A", "B", "C", "D");
  Optional<String> result = list.stream().findAny();

  Assert.assertTrue(result.get().equals("A")); // A
}

대부분 첫 번째 요소를 가져오지만 보장하지는 않는다.

만일 parallel을 사용하여 찾으면 첫 번째 요소를 가져오지 않는다.

@Test
public void findAnyParallelTest() {
  List<String> list = Arrays.asList("A", "B", "C", "D");
  Optional<String> result = list.stream().
    parallel().findAny();

  Assert.assertFalse(result.get().equals("A")); // C
}

Stream.findFirst

findFirst()는 Stream에서 첫 번째 요소를 찾는다. 순서에서 첫 번째 요소를 가져와야만 하는 경우에 사용할 수 있다.

@Test
public void findFirstTest() {
  List<String> list = Arrays.asList("A", "B", "C", "D");
  Optional<String> result = list.stream().findFirst();

  Assert.assertTrue(result.get().equals("A")); // A
}

또한 parallel로 실행을 해도 동일하게 첫 번째 요소를 가져온다.

@Test
public void findFirstParallelTest() {
  List<String> list = Arrays.asList("A", "B", "C", "D");
  Optional<String> result = list.stream().
    parallel().findFirst();

  Assert.assertTrue(result.get().equals("A")); // A
}

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



반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유