zoukankan      html  css  js  c++  java
  • Java8 新特性 Optional

     1 package test;
     2 
     3 import java.util.Optional;
     4 
     5 import org.junit.Test;
     6 /**
     7  * Optional 类是一个可以为null的容器对象。
     8  * 如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。
     9  * 用于解决空指针异常
    10  * @author xiaou
    11  *
    12  */
    13 public class TestA {
    14     public static void main(String[] args) {
    15         String name = null;
    16         String tip ="对象为null";
    17         
    18         /*
    19          *  判断对象是否未空,如果为空则返回tip值
    20          *  orElse 和 orElseGet 区别
    21          *  orElse 是不管对象是不是null都会创建对象
    22          *  orElseGet 如果对象为null时才会创建对象
    23          */
    24         String opt = Optional.ofNullable(name).orElse(tip);
    25         // 参数是一个函数式接口
    26         String opt2 = Optional.ofNullable(name).orElseGet(()->tip);
    27         System.out.println(opt);
    28         System.out.println(opt2);
    29     }
    30     @Test
    31     public void test2test() {
    32         String name = null;
    33         String tip ="...";
    34          Optional<String> nullable = Optional.ofNullable(name);
    35          //  如果不写这条语句也有可能会造成空指针异常
    36          if(nullable.isPresent()) {
    37              System.out.println(nullable.get().length());
    38          }
    39          
    40         //String opt = Optional.ofNullable(name).orElse(tip);
    41         
    42     }
    43     /**
    44      * 返回异常
    45      *
    46      */
    47     @Test(expected = IllegalArgumentException.class)
    48     public void test3test()  {
    49         String name = null;
    50         String tip ="...";
    51         String nullable = Optional.ofNullable(name).orElseThrow(()->new IllegalArgumentException());
    52         System.out.println(nullable);
    53     }
    54     /**
    55      * 过滤值
    56      */
    57     @Test
    58     public void test4test() {
    59         String name = "26303qq.com";
    60         Optional<String> opt = Optional.ofNullable(name).filter((u)->u.contains("@"));
    61         if (opt.isPresent())
    62             System.out.println(opt.get().toString());
    63     }
    64     
    65     /**
    66      * map
    67      */
    68     @Test
    69     public void test5test() {
    70         User user = new User("xiaou", "2@qq.com");
    71         Optional<String>email = Optional.ofNullable(user).map(u->u.getEmail());
    72         System.out.println(email.get());
    73     }
    74     /*
    75      * flatMap与map(Function)非常类似,区别在于传入方法的lambda表达式的返回类型。
    76      * map方法中的lambda表达式返回值可以是任意类型,在map函数返回之前会包装为Optional。 
    77      * 但flatMap方法中的lambda表达式返回值必须是Optionl实例。 
    78      */
    79     /**
    80      * flatmap
    81      */
    82     @Test
    83     public void test6test() {
    84         User user = new User("xiaou", "2@qq.com");
    85         // 第一种
    86         Optional<String>email = Optional.ofNullable(user).flatMap(u->Optional.of(u.getEmail()));
    87         // 第二种 在user对象中添加一个方法 返回Option对象
    88         Optional<String>email2 = Optional.ofNullable(user).flatMap(User::getOptionalByEmail);
    89         System.out.println(email.orElse("ss"));
    90         System.out.println(email2.get());
    91     }
    92     
    93 
    94 }
     1 package test;
     2 
     3 import java.util.Optional;
     4 
     5 public class User {
     6     private String name;
     7     private String email;
     8     
     9     public User() {
    10         super();
    11     }
    12     public User(String name, String email) {
    13         super();
    14         this.name = name;
    15         this.email = email;
    16     }
    17     public String getName() {
    18         return name;
    19     }
    20     public void setName(String name) {
    21         this.name = name;
    22     }
    23     public String getEmail() {
    24         return email;
    25     }
    26     public void setEmail(String email) {
    27         this.email = email;
    28     }
    29     
    30     public Optional<String> getOptionalByEmail(){
    31         return Optional.ofNullable(email);
    32     }
    33 }
    View Code
  • 相关阅读:
    AtCoder Beginner Contest 205
    Codeforces Round #725 (Div. 3)
    Educational Codeforces Round 110 (Rated for Div. 2)【A
    Codeforces Round #722 (Div. 2)
    AtCoder Beginner Contest 203(Sponsored by Panasonic)
    AISing Programming Contest 2021(AtCoder Beginner Contest 202)
    PTA 520 钻石争霸赛 2021
    Educational Codeforces Round 109 (Rated for Div. 2)【ABCD】
    AtCoder Beginner Contest 200 E
    Educational Codeforces Round 108 (Rated for Div. 2)【ABCD】
  • 原文地址:https://www.cnblogs.com/FlyBlueSky/p/9704140.html
Copyright © 2011-2022 走看看