内容简介:上一篇小乐带大家了解了Java8新特性之Stream,接下来将会继续述说Java新特性之OptionalOptional<T>类(java.util.Optional)是一个容器类,代表一个值存在或不存在,原来用null表示一个值不存在,现在Optional可以更好的表达这个概念。并且可以避免空指针异常。
上一篇小乐带大家了解了 Java 8新特性之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新特性,请继续关注,转载请说明出处和作者。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 『互联网架构』软件架构-redis特性和集群特性(中)(49)
- 『互联网架构』软件架构-redis特性和集群特性(上)(48)
- 『互联网架构』软件架构-redis特性和集群特性(下)(50)
- JDK 14 功能特性
- C# 特性(Attribute)
- python—高级特性
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。