您好,欢迎访问一九零五行业门户网

Java8新特性Optional的用法介绍(附代码)

本篇文章给大家带来的内容是关于java8新特性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、orelsegetorelseget与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、mapmap处理有值的情况,如果有值,则对其执行调用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新特性optional的用法介绍(附代码)的详细内容。
其它类似信息

推荐信息