zoukankan      html  css  js  c++  java
  • 乐字节-Java8新特性之Optional

    上一篇小乐带大家了解了Java新特性之Stream,接下来将会继续述说Java新特性之Optional

    Optional<T>类(java.util.Optional)是一个容器类,代表一个值存在或不存在,原来用null表示一个值不存在,现在Optional可以更好的表达这个概念。并且可以避免空指针异常。

    1、of

    为非null的值创建一个Optional,如果值为null,则会抛出NullPointerException

    Optional<Integer> optional = Optional.of(13);
    System.out.println(optional)

     

    2、ofNullable

    为指定的值创建一个Optional,如果指定的值为null,则返回一个空的Optional。

    Optional<String> optional2 = Optional.ofNullable(null);
    System.out.println(optional2);
    optional2 = Optional.ofNullable("aaa");
    System.out.println(optional2);

     

    3、isPresent

    如果值存在返回true,否则返回false。

    Optional<String> optional2 = Optional.ofNullable(null);
    System.out.println(optional2);
    System.out.println(optional2.isPresent());

    optional2 = Optional.ofNullable("aaa");
    System.out.println(optional2);
    System.out.println(optional2.isPresent());

    4、get

    如果Optional有值则将其返回,否则抛出NoSuchElementException。

    optional2 = Optional.ofNullable("aaa");
    System.out.println(optional2);
    System.out.println(optional2.isPresent());
    System.out.println(optional2.get());

    5、ifPresent  

    如果Optional实例有值则为其调用consumer,否则不做处理 。隐士地其中进行了null判断。

    public static void main(String[] args) {
       String str1 = "hello";
       String str2 = null;
       Optional<String> optional1 = Optional.ofNullable(str1);
       Optional<String> optional2 = Optional.ofNullable(str2);

       optional1.ifPresent(str->System.out.println(str.length()));
       optional2.ifPresent(str-> System.out.println(str.length()));
    }

     

    6、orElse

    如果有值则将其返回,否则返回指定的其它值。

    public static void main(String[] args) {
       String str1 = "hello";
       String str2 = null;
       Optional<String> optional1 = Optional.ofNullable(str1);
       Optional<String> optional2 = Optional.ofNullable(str2);
       System.out.println(optional1.orElse("默认字符串"));
       System.out.println(optional2.orElse("默认字符串"));
    }

    7、orElseGet

    orElseGet与orElse方法类似,区别在于得到的默认值。orElse方法将传入的一个值作为默认值,orElseGet方法可以接受Supplier接口的实现用来生成默认值

    public static void main(String[] args) {
       Integer i = 20;
       Optional<Integer> op = Optional.ofNullable(i);
       System.out.println(op.orElseGet(()->0));
       System.out.println(Optional.ofNullable(null).orElseGet(()->0));
    }

     

    8、orElseThrow

    如果有值则将其返回,否则抛出supplier接口创建的异常。

    public static void main(String[] args) {
       // 自己指定异常
       System.out.println((Optional.ofNullable("a").orElseThrow(()->new IndexOutOfBoundsException())));
       System.out.println((Optional.ofNullable(null).orElseThrow(()->new IndexOutOfBoundsException())));
    }

     

    9、map

    map处理有值的情况,如果有值,则对其执行调用map参数中的函数得到返回值,否则返回空Optional。

    public static void main(String[] args) {
      List<String> list = new ArrayList<String>(){
          {
               add("aaa");
               add("bbb");
               add(null);
          }
      };

      list.stream().forEach(temp ->{
           Optional<String> opt = Optional.ofNullable(temp);
           System.out.println(opt.map(n -> {
              return n.toUpperCase();
          }).orElse("Nothing"));
      });

      // 简写为如下形式
       list.stream().forEach(temp->{
           System.out.println(Optional.ofNullable(temp).map(n->n.toUpperCase()).orElse("Nothing"));
      });
    }

     

    10、flatMap

    如果有值,为其执行mapping函数返回Optional类型返回值,否则返回空Optional。flatMap与map(Funtion)方法类似,区别在于flatMap中的mapper返回值必须是Optional。调用结束时,flatMap不会对结果用Optional封装。 可以将内容

    public static void main(String[] args) {
       Optional<String> opt1 = Optional.ofNullable("aaa");
       Optional<String> opt2 = Optional.ofNullable(null);
       System.out.println(opt1.flatMap(n->{
           return Optional.ofNullable(n.toUpperCase());
      }).orElse("还会没有吗"));

       System.out.println( opt2.flatMap(n->{
           return Optional.ofNullable(n.toUpperCase());
      }).orElse("还会没有吗"));
    }

     

    11、filter

    如果有值并且满足断言条件返回包含该值的Optional,否则返回空Optional。

    public static void main(String[] args) {
       Optional<String> opt1 = Optional.ofNullable("aabbbbaa");
       Optional<String> opt2 = Optional.ofNullable(null);

       System.out.println(opt1.filter(value->value.length()>6));
       System.out.println(opt2.filter(value->value.length()>6));
    }

     

    好了,Java8新特性之Optional就介绍到这里了,接下去小乐将会继续带大家了解Java8新特性,请继续关注,转载请说明出处和作者。

  • 相关阅读:
    每日总结
    每日总结
    每日总结
    每日总结
    每日总结
    每日总结
    每日总结
    每日总结
    Java学习哈希表2
    Java学习哈希表1
  • 原文地址:https://www.cnblogs.com/lotbyte/p/10698341.html
Copyright © 2011-2022 走看看