java8 optional 類的運用
阿新 • • 發佈:2018-12-16
常用方法:
public static <T> Optional<T> of(T value);// 為Optional設值,值為空拋異常
public static <T> Optional<T> ofNullable(T value) ;// 為Optional設值,值為空不拋異常
public T get();// 如果Optional中有值,則返回值,否則丟擲 NoSuchElementException
public boolean isPresent
public void ifPresent(Consumer<? super T> consumer) ;// 如果存在值,則使用該值呼叫指定的消費者,否則不執行任何操作。
public T orElse(T other) ; //如果建立的Optional中有值存在,則返回此值,否則返回一個預設值
public T orElseGet(Supplier<? extends T> other) ; //如果Optional中有值存在,則返回此值,否則返回一個由Supplier介面生成的值
實際應用:
@Test public void test1(){ Optional<User> userOptional = Optional.of(new User("張三","123456",12)); // 一般使用,不推薦 if (userOptional.isPresent()) { System.out.println(userOptional.get()); } // 推薦函式式寫法 userOptional.ifPresent(u-> System.out.println(u)); // school 與 user 是一對多的關係,school 裡面有一個user的集合 // 若school裡面的user集合不為null,輸出該集合,否則輸出一個空集合 User user1 = new User("張三","123456",12); User user2 = new User("李四","123456",12); List<User> userList = Arrays.asList(user1,user2); School school = new School(); school.setUserList(userList); //此行可註釋,使list為null //一般寫法 List<User> list = school.getUserList(); if (list!=null) { System.out.println(list); }else{ System.out.println(new ArrayList<User>()); } // 函式式寫法 Optional<School> optionalSchool = Optional.ofNullable(school); System.out.println(optionalSchool.map(u -> u.getUserList()).orElse(Collections.emptyList())); }