filter().count()

반응형

Stream anyMatch() vs filter.count > 0 성능 비교

개요

Java에서 스트림으로 작업할 때 조건자 or 기준과 일치하는 항목이 하나 이상 있는지 확인하는 로직을 작성할 때가 있습니다.
anyMatch()와 filter().count > 0 Stream API는 동일한 처리를 하지만 anyMatch()를 사용하는 것이 더 안전하고 성능상에 장점이 있는데 그 차이점에 대해 알아보고자 합니다.

차이점

가장 큰 차이점은 anyMatch()의 경우 Stream 요소에 일치하는 첫번째 항목이 존재하면, Stream을 중지하고 결과를 반환하게 됩니다.
반면에 count()의 경우는 모든 Stream 요소를 순회하고 그 결과인 count를 반환하게 됩니다.

Stream 요소가 작을 경우는 큰 차이가 없겠지만, Stream의 요소가 크면 클수록 성능상에 영향을 미칠 수 있습니다.

Code

일치하는 요소가 존재하면 Stream 종료
return component.getContents()
                .stream()
                .anyMatch(x -> "v1000".contains(x.getContentsCode())) ? "Y" : "N";
Contents Size까지 스트림 순회하고 count 반환
return component.getContents()
                .stream()
                .filter(x -> "v1000".contains(x.getContentsCode()))
                .count() > 0 ? "Y" : "N";
반응형

+ Recent posts

반응형