内容简介:上一篇小乐带大家了解了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—高级特性
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Smashing Book
Jacob Gube、Dmitry Fadeev、Chris Spooner、Darius A Monsef IV、Alessandro Cattaneo、Steven Snell、David Leggett、Andrew Maier、Kayla Knight、Yves Peters、René Schmidt、Smashing Magazine editorial team、Vitaly Friedman、Sven Lennartz / 2009 / $ 29.90 / € 23.90
The Smashing Book is a printed book about best practices in modern Web design. The book shares technical tips and best practices on coding, usability and optimization and explores how to create succes......一起来看看 《The Smashing Book》 这本书的介绍吧!