Optional.findAny Optional.findFirst 개념 및 샘플코드

    728x90
    반응형

    Optional

    1) JDK 8에서 도입된 클래스. 함수형 프로그래밍

    2) 값이 있을 수도 있고 없을 수도 있는(Nullable) 객체를 감싸고 있는 Wrapper 클래스

    3) NullPointerException을 방지 코드의 안정성과 가독성을 높일 수 있음

    4) 메소드의 리턴값이나 컬렉션 등에서 사용되며 값이 없을 수도 있는 상황에서 명시적으로 처리할 때 유용함

     

     

    Optional.findAny

    1) parallelStream(병렬 스트림)에서 주로 사용

    2) 여러 개의 요소를 가진 Stream에서 무작위 값을 리턴

    3) 여러 스레드가 동시에 작업할 때 유용

     

     

    Optional.findFirst

    1) Stream(순차 스트림/일반적)에서 주로 사용

    2) Stream의 첫번째 값을 리턴

    3) parallelStream에서는 성능상 이점이 없을 수 있음

    import java.util.Optional;
    import java.util.regex.Pattern;
    
    public class OptionalFindAPI {
        public static void main(String[] args) {
            String inputString = "apple;orange;banana;grape;kiwi";
    
            /*
             * Pattern.compile()과 splitAsStream() 메소드를 사용해
             * 문자열을 잘라 Stream<String> 타입의 인스턴스를 생성
             * 1.findAny는 병렬 스트림으로 처리되어 무작위 값을 리턴
             * 2.findFirst는 맨 첫번째 요소인 'apple'을 리턴
             */
            Optional<String> anyElement = 
                    Pattern.compile(";").splitAsStream(inputString)
                    .parallel()
                    .findAny();
    
            Optional<String> firstElement = 
                    Pattern.compile(";").splitAsStream(inputString)
                    .findFirst();
    
            // 결과
            System.out.println("findAny(): " + anyElement.orElse("No element"));
            System.out.println("findFirst(): " + firstElement.orElse("No element"));
        }
    }
    CONSOLE
    findAny(): apple
    findFirst(): apple
    728x90
    반응형

    댓글