java8 Optional
阅读数:51 评论数:0
跳转到新版页面分类
python/Java
正文
一、概述
Optional是在java.util包下的一个用于代替null的一个工具类,如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。Optional 类的引入很好的解决空指针异常。
二、使用
1、创建方法
Optional<String> emptyOptional = Optional.empty();
Optional<String> notNullOptional = Optional.of("aaa");
Optional<String> notNullOptional = Optional.ofNullable("aaa");
2、判断方法
optional.ifPresent(System.out::println);
//如果实例非null,就返回实例值,否则返回指定的其它值
String aa = optional.orElse("haha");
// 如果optional不为空,则返回optional中的对象;如果为null,则使用Supplier函数生成
optional.orElseGet(() -> "Default Value")
//如果optional不为空,则返回optional中的对象;如果为null,则抛出Supplier函数生成的异常
String bb = optional.orElseThrow(() -> new Exception("抛出异常"));
//如果有值并且满足条件,就返回该Optional,否则返回空Optional
Optional<User> result = Optional.ofNullable(user).filter(u -> u.getEmail() != null && u.getEmail().contains("@"));
//如果optional不为空,则将optional中的对象 t 映射成另外一个对象 u,并将 u 存放到一个新的optional容器中
Optional<Integer> notNullToInteger = notNullOptional.map((value) -> 1);
相关推荐
一、概述
1、lambda允许把函数作为一个方法的参数。
二、取代某些匿名内部类
1、无参数函数的简写
如果需要创建一个线程,一种常见的写法是这样:
// JDK7 匿名内部类写法
new Threa
作用:使代码更简洁。
有些情况下,我们用lambda表达式仅仅是调用一些已经存在的方法,除了调用动作外,没有其他任何多余的动作,而通过方法引用可以使代码更简洁、更容易理解。
类型
语法
对应的L
一、概述
如果没有终端操作,中间操作是不会得到执行的(惰性求值)。
stream的使用可以将代码中大量的for循环变为简单的链式函数操作,但是需要注意性能,在数据量小的情况下二都相差不多,但是在数据
在JAVA5已经提供了Future和Callable的实现,可以用于阻塞式获取结果,如果想要异步获取结果,通常都会以轮询的方式去获取结果,如下:
<pre class="language
Supplier接口是JAVA8以后配合lambda表达式和函数式接口编程(FunctionInterface,以下简称FI)组合使用的一个接口。它最适合于表示工厂,简而言之,Supplier&
一、函数式编程和非函数编程的区别
(1)函数式编程:先考虑传入的参数,再考虑方法的实现。
(2)非函数编程:先定义好方法,再传入指定的参数
二、何为函数式接口
函数式接口(Functional Int
一、Java8简介
1、添加了函数式编程、Stream、全新的日期处理类。
2、函数编程新加了一些概念:lambda表达式、函数式接口、函数引用、默认方法、Optional类(干掉空指针)等。
3、S
一、概述
Java8引入了@Contented这个新的注解来减少伪共享(False Sharing)的发生。
二、伪共享
1、缓存行
CPU读取内存数据时并非一次只读一个字节,而是会读一段64字节长度