JDK8新特性9——Optional类

        Optional是一个没有子类的工具类,Optional是一个可以为null的容器类,代表一个值存在或不存在。它的作用主要是为了解决避免NUll检查,防止空指针异常。

1. Optional类的创建方式

1)Optional.of(T t):创建一个Optional实例

注意:of只能传入具体值,不能传入null,否则会抛空指针异常

2)Optional.empty():创建一个空的Optional实例

3)Optional.ofNullable(T t):若t不为null,创建optional实例,否则创建空实例

2. Optional类的常用方法

1)isPresent():判断是否包含值,包含值返回true,不包含值返回false

2)get():如果Optional有值则将其返回,否则抛出NoSuchElementException异常

3)orElse(T t):如果调用对象包含值,返回该值,否则返回参数t

例如:创建一个空的Optional,调用其orElse,返回值为orElse的参数值

public void test1(){
   Optional<String> empty = Optional.empty();
   String orElse = empty.orElse("默认值");
   System.out.println(orElse);
}

输出结果:

4)orElseGet(Supplier s):如果调用对象包含值,返回该值,否则返回s获取的值

5)map(Function f):如果有值对其处理,并返回处理后的Optional,否则返回Optional.empty()

public static void main(String[] args) {
	Optional<String> op = Optional.ofNullable("abc");
	Optional<String> map = op.map(str -> str.toUpperCase());
	System.out.println(map.get());
}

6)flatMap(Function f):与map类似,要求返回值必须是Optional

7)ifPresent(Consymer consumer):如果有值,就调用参数,如果没值,就什么都不做

 public void test1(){
   Optional<String> o = Optional.of("张三");
   o.ifPresent((str)->System.out.println(str));
}

运行结果:

3. Optional的用法demo

定义一个方法将User中的用户名转成大写并返回

@Test
public void test2(){
	User u = new User();
	u.setUsername("zhangsan");
	Optional<User> optional = Optional.of(u);
	changeUser(optional);
	System.out.println(changeUser(optional));

}

public String changeUser(Optional<User> optional){
	return optional.map(User::getUsername)  // 转成String
		.map(String::toUpperCase)       // 转成大写
		.orElse("null");        // 判空
}

运行结果:

小结:Optional是一个可以为null的容器对象,orElse,ifPresent,ifPresentOrElse,map等方法避免对null的判断,写出更加优雅的代码。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值