• Java8(六) Optional


    Optional

    Optional 类是一个可以为null的容器对象。可以很好的解决空指针异常。

    1 创建Optional对象

    创建一个空的Optional对象
    Optional<String> empty = Optional.empty();
    
    创建一个非空的Optional对象
    Optional<String> test = Optional.of("test");
    
    创建一个即可空又可非空的Optional对象
    Optional<Object> object = Optional.ofNullable(null);
    

    2 常见操作

    isPresent()
    //判断是否为null
    Optional<Object> object = Optional.ofNullable(null);
    if (object.isPresent()) {
        System.out.println(123);
    }
    
    get()
    //如果Optional有值则将其取出,否则抛出NoSuchElementException。
    Optional<String> test = Optional.ofNullable("test");
    if (test.isPresent()) {
        String s = test.get();
        System.out.println(s);
    }
    
    ifPresent()
    //如果Optional实例有值则调用传入的Lambda表达式,否则不做处理
    Optional<String> test = Optional.ofNullable("test");
    test.ifPresent(System.out::println);
    
    orElse()
    //如果有值则将其返回,否则返回指定的其它值。
    Optional<String> test = Optional.empty();
    System.out.println(test.orElse("哈哈哈哈"));
    
    orElseGet()
    //与orElse方法类似,但orElse只能传入Optional泛型中的对象
    //orElseGet方法可以接受Supplier接口的实现来生成默认值
    Optional<String> test = Optional.empty();
    test.orElseGet(() -> "123");
    
    map()
    //如果有值,则对其执行调用mapping函数得到返回值。如果返回值不为null,则创建包含mapping返回值的Optional作为map方法返回值,否则返回空Optional。
    Optional<String> test = Optional.of("12");
    Optional<String> s = test.map(x -> x + "12");
    s.ifPresent(System.out::println);
    
    flatmap()
    //与map方法类似,区别在于mapping函数的返回值不同。map方法的mapping函数返回值可以是任何类型T,而flatMap方法的mapping函数必须是Optional。
    Optional<String> test = Optional.of("12");
    Optional<String> s = test.flatMap(x -> Optional.of(x + "12"));
    s.ifPresent(System.out::println);
    
    filter
    //如果有值并且满足断言条件返回包含该值的Optional,否则返回空Optional。
    Optional<Integer> integer = Optional.of(12);
    Optional<Integer> integer1 = integer.filter(i -> i > 6);
    integer1.ifPresent(System.out :: println);
    
  • 相关阅读:
    史上最全设计模式导学目录(完整版)
    代码整洁之道读后感(三)
    代码整洁之道读后感(二)
    代码整洁之道读后感(一)
    groovy的三个强劲属性(一)Gpath
    spring mvc 自定义编辑器
    Class.this 和 this 的有什么不同
    python 异常知识点
    Freemaker 自定义指令和函数
    Freemaker如何遍历key为non-string类型的map?
  • 原文地址:https://www.cnblogs.com/lyldelove/p/13388204.html
Copyright © 2020-2023  润新知