java 8 stream API의 findAny
의 findFirst
의 차이점을 알아보자.
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
반응형