[백엔드/자바] Optional.findAny Optional.findFirst 개념 및 샘플코드

2023. 11. 15. 20:18
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
반응형

BELATED ARTICLES

more