Java 8 Stream findFirst findAny 차이
Stream에서 어떤 조건에 일치하는 요소(element) 1개를 찾을 때, findAny()
와 findFirst()
API를 사용할 수 있습니다.
findAny()
는 Stream에서 가장 먼저 탐색되는 요소를 리턴하고, findFirst()
는 조건에 일치하는 요소들 중에 Stream에서 순서가 가장 앞에 있는 요소를 리턴합니다.
차이점에 대해서 자세히 알아보겠습니다.
findFirst()
findFirst()
는 filter 조건에 일치하는 element 1개를 Optional로 리턴합니다. 조건에 일치하는 요소가 없다면 empty가 리턴됩니다.
Output:
findAny()
findAny()
도 findFirst()
처럼 조건에 일치하는 요소 1개를 리턴합니다.
Output:
findFirst() vs findAny()
Stream을 직렬로 처리할 때 findFirst()
와 findAny()
는 동일한 요소를 리턴하며, 차이점이 없습니다.
하지만 Stream을 병렬로 처리할 때는 차이가 있습니다.
findFirst()
는 여러 요소가 조건에 부합해도 Stream의 순서를 고려하여 가장 앞에 있는 요소를 리턴합니다.
반면에 findAny()
는 Multi thread에서 Stream을 처리할 때 가장 먼저 찾은 요소를 리턴합니다. 따라서 Stream의 뒤쪽에 있는 element가 리턴될 수 있습니다.
아래 코드는 Stream을 병렬(parallel()
)로 처리할 때, findFirst()
를 사용하는 예제입니다. 여기서 findFirst()
는 항상 b를 리턴합니다.
Output:
아래 코드는 Stream을 병렬로 처리할 때, findAny()
를 사용하는 예제입니다. 여기서 findAny()
는 실행할 때마다 리턴 값이 달라지며, b1 또는 b를 리턴합니다.
Output:
Related Posts
Last updated
Was this helpful?