ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Optional API 사용
    JAVA/JAVA8 관련 2022. 4. 17. 16:38

    Optional API를 주로 어떻게 사용하는지 살펴보았다.

    1. NULL 체크

      List<OnlineClass> springClasses = new ArrayList<>();
            springClasses.add(new OnlineClass(1, "spring boot", true));
            springClasses.add(new OnlineClass(5, "rest api development", false));
    
            Optional<OnlineClass> spring = springClasses.stream()
                    .filter(oc-> oc.getTitle().startsWith("spring"))
                    .findFirst();
    
            // 1. spring이 값이 있는지 체크 true이면 값이 있음. (null 체크)
            boolean present = spring.isPresent();
            System.out.println(present);
            // 아래와 같이 사용할 수도 있다.
            spring.ifPresent(a-> System.out.println(a.getTitle()));

    위의 결과는 spring으로 시작하는 타이틀 값이 있기 때문에  true이다.

    2. orElse 관련 메서드 

    // orElseGet: 있을 때는 가져오고 없을때는 새로운 class를 만든다.
    // spring의 startsWith에 있는 단어를 없는 단어로 변경 후 실행 하면, 새로운 class 생성하는 것을 볼수 있다.
    // orElse : 있을 때도 가져오지만, 새로운 class도 만든다.
    OnlineClass onlineClass1 = spring.orElseGet(App::createNewClasss);
    System.out.println(onlineClass1.getTitle());
    
    OnlineClass onlineClass2 = spring.orElse(createNewClasss());
    System.out.println(onlineClass2.getTitle());
    
    
    
    private static OnlineClass createNewClasss() {
        System.out.println("creating new online class");
        return new OnlineClass(10, "New class", false);
    }

    onlineClass1은 spring boot

    onlineClass2은 create new online class를 출력한다.

     

    3. orElseThrow : 없는 경우 예외처리

    // orElseThrow : 없는 경우에 예외 처리 (에러발생)
    Optional<OnlineClass> spring = springClasses.stream()
            .filter(oc-> oc.getTitle().startsWith("jpa"))
            .findFirst();        
    // orElseThrow : 없는 경우에 예외 처리 (에러발생)
    OnlineClass onlineClass3 = spring.orElseThrow(IllegalStateException::new);
    System.out.println(onlineClass3.getTitle());
    
    OnlineClass onlineClass4 = spring.orElseThrow(()->{
        return new IllegalStateException();
    });
    
    // jpa로 시작하는 데이터가 없기 때문에 Exception 발생

    예제

    Optional<OnlineClass> onlineClass =
            spring.filter(oc->oc.isClosed());
    
    System.out.println(onlineClass.isEmpty());
    // false
    // spring으로 시작하는 값은 위의 1번이다.
    // 1번의 closed값은 true이기 때문에 isEmpty 값은 false가 나온다.

     

    'JAVA > JAVA8 관련' 카테고리의 다른 글

    Date와 Time  (0) 2022.05.15
    Date 와 Time 소개  (0) 2022.05.15
    [더 자바8] Opitonal 소개  (0) 2022.04.05
    [더 자바8] STREAM API  (0) 2022.03.20
    [더 자바8] 인터페이스 기본 메소드와 스태틱 메소드  (0) 2022.02.13
Designed by Tistory.