JAVA 8 StreamAPI 和 lambda表达式 总结(三)--Optional类型
2017-02-27 17:17
936 查看
在学习Stream的时候,我们会看到Optional类型,它是对结果的封装类,我们看一下它出现的地方:
上面的随机数被封装到list列表中,然后根据filter规则,只有大于97的数会被筛选出来,然后findAny()方法可以返回筛选中的任意一条,预期的结果应该返回某个int型数,但是这里返回了Optional类,封装了结果,它比直接返回int更加安全,因为不会出现null情况。
那怎么从Optional对象中取回我要的结果呢?
get方法可以取出我们要的结果,但是如果随机数没有一个大于97,get返回的结果会是null,这就体现不出Optional的优势,它提供了另外一个方法避免取出的是null。
当过滤的结果是null,orElseThrow方法可以抛出一个异常,当然,还有orElse返回一个备选值,或者orElseGet通过逻辑计算出一个备选值。
Optional也可以对结果进行处理:
上面两个代码段都可以对有结果的Optional进行值处理。
List<Integer> list = new ArrayList<>(); for (int i = 0; i < 10; i++) { list.add((int) (Math.random() * 100)); } ArrayList<Integer> results = new ArrayList<>(); //findany 可以返回结果中的任意一条 Optional<Integer> any = list.stream().filter((x) -> x > 97).findAny();
上面的随机数被封装到list列表中,然后根据filter规则,只有大于97的数会被筛选出来,然后findAny()方法可以返回筛选中的任意一条,预期的结果应该返回某个int型数,但是这里返回了Optional类,封装了结果,它比直接返回int更加安全,因为不会出现null情况。
那怎么从Optional对象中取回我要的结果呢?
Integer integer = any.get(); System.out.println("get方法取结果:" + integer);
get方法可以取出我们要的结果,但是如果随机数没有一个大于97,get返回的结果会是null,这就体现不出Optional的优势,它提供了另外一个方法避免取出的是null。
//如果返回没有值,则可以做一些处理 any.orElseThrow(() -> new NullPointerException("如果any没有值,则抛出异常")); any.orElse(0); any.orElseGet(()->{ return 1+1; });
当过滤的结果是null,orElseThrow方法可以抛出一个异常,当然,还有orElse返回一个备选值,或者orElseGet通过逻辑计算出一个备选值。
Optional也可以对结果进行处理:
ArrayList<Integer> results = new ArrayList<>(); //如果结果存在,则可以传入函数对这个结果进行处理(把它放入results 中) any.ifPresent(x -> results.add(x)); //如果any不为空,则对结果+100 Optional<Integer> afterMap = any.map(x -> x + 100); System.out.println("处理后的结果: " + afterMap);
上面两个代码段都可以对有结果的Optional进行值处理。
相关文章推荐
- JAVA 8 StreamAPI 和 lambda表达式 总结(一)--lambda表达式
- JAVA 8 StreamAPI 和 lambda表达式 总结(二)--Stream基本操作
- JAVA 8 StreamAPI 和 lambda表达式 总结(四)--stream的一些聚合操作
- java8 lambda表达式之Stream API的用法实践
- Java 8新特性:新语法方法引用和Lambda表达式及全新的Stream API
- Java8 Lambda表达式与Stream API (二): Stream API的使用
- Java 8新特性:新语法方法引用和Lambda表达式及全新的Stream API
- Java8--Lambda表达式、Stream和时间API
- Java8学习:Lambda表达式、Stream API和功能性接口 — 教程、资源、书籍和实例
- JAVA8 Stream API总结的好的文章 —— 持续更
- 深入浅出理解JAVA 8 Lambda表达式 Stream
- Java8 lambda表达式使用总结
- Java 8 Lambda 表达式学习心得总结
- java8初体验——optional、lambda、stream、map
- Java8新特性Lambda表达式的一些复杂用法总结
- java8 lambda表达式之 Stream常用方法
- java 8 lambda 表达式的优缺点总结
- Java 8 动态类型语言Lambda表达式实现原理分析
- 在Java 8中对stream带有lambda表达式的操作进行调试
- Java 8 动态类型语言Lambda表达式实现原理分析