java-java8新特性之optional

从 Java 8 引入的一个很有趣的特性是 Optional 类。Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException)

        Optional empty = Optional.of(null);   
//Exception in thread "main" java.lang.NullPointerException
        Optional empty = Optional.empty(); 
 //Exception in thread "main" java.util.NoSuchElementException: No value present
        Optional empty = Optional.ofNullable(null); 
//Exception in thread "main" java.util.NoSuchElementException: No value present
        Object o = empty.get();
        System.out.println(o);
 
 

下面通过几个小示例来说明基本用法

  • 判断是否为null
        String name = "fsdfds";
        Optional optional = Optional.ofNullable(name);
        System.out.println(optional.isPresent());//判断是否不为null 不为空ture
        System.out.println(optional.get()); //fsdfds
  • 通过ifpresent判断是否执行
        String name = "fsdfds";
        Optional optional = Optional.ofNullable(name);//如果不为null 才会执行下面操作
        optional.ifPresent(new Consumer() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });
  • orElse来设置默认值(如果是空则是默认值,如果不为空是设置值)
        String s1 = null;
        String s2 = "sss";
        String ss = Optional.ofNullable(s1).orElse(s2);
        System.out.println(ss);//sss
  • 表面看来和orElse是一样的,其实内部实现是不同的,orelse 每次都创建,而orelseGet只创建一次
        String s1 = null;
        String s2 = "sss";
        String ss = Optional.ofNullable(s1).orElseGet(new Supplier() {
            @Override
            public String get() {
                return "www";
            }
        });
        System.out.println(ss);
  • map 转化
        String s = "sss";

        Optional ss = Optional.ofNullable(s).map(new Function() {
            @Override
            public String apply(String s) {
                return s+"123";
            }
        });

        System.out.println(ss.get());  // sss123
  • flatMap转化
   String s = "sss";
        Optional ss = Optional.ofNullable(s).flatMap(new Function>() {
            @Override
            public Optional apply(String s) {
                return Optional.ofNullable(s+"123");
            }
        });
        System.out.println(ss.get());  // sss123
  • filter过滤
        String s = "sss";
        Optional ss = Optional.ofNullable(s).filter(new Predicate() {
            @Override
            public boolean test(String s) {
                return true;      //true 有值 false 无值
            }
        });
        System.out.println(ss.get());

总结:(因为笔者在学习optionnal之前用过rxjava和spark,所以对这种链式调用以及map,flatmap 这个并不陌生,如果你相对比较陌生,请阅读其他文档

  • Optional 是 Java 语言的有益补充 —— 它旨在减少代码中的NullPointerExceptions,虽然还不能完全消除这些异常。
  • 它也是精心设计,自然融入 Java 8 函数式支持的功能。
  • 总的来说,这个简单而强大的类有助于创建简单、可读性更强、比对应程序错误更少的程序。

你可能感兴趣的:(java-java8新特性之optional)