乐字节-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新特性,请继续关注,转载请说明出处和作者。
下一篇: 媳妇说今天给我做了丰盛的四菜一汤!