• 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
  • 相关阅读:
    #2019120500018-LG 小雨的数字游戏
    假期Noip笔记
    #2019120500016 逆序对与归并排序
    #2019120500015-LG 全排列
    #2019120500014-LG 采药
    #2019120500013-LG 合并果子
    二分与三分
    #2019120500012-LG 小鱼比可爱
    #2019120500011-LG 约瑟夫问题&玩具谜题
    HDU 5738 共线点集
  • 原文地址:https://www.cnblogs.com/FlyBlueSky/p/9704140.html
Copyright © 2020-2023  润新知