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

互联网 19-4-13
本篇文章给大家带来的内容是关于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、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新特性Optional的用法介绍(附代码)的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: optional
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:Java线程的生命周期的介绍(附示例)

相关资讯