Optional的用法-代码案例
程序员文章站
2022-03-04 11:35:47
...
前言
Optional是一个容器对象,用来判断对象是否为null,记住,只会判断是否为null,代替的 if else 的写法。废话不多说,下面就来看看一下写法吧。
代码
- 示例1:
String s = Optional.ofNullable(user)
.map(o -> o.getUsername())
.orElseGet(() -> { return "李四";});
用法说明:Optional.ofNullable(user)是判断user是否为null,如果为null,则不会执行map(o -> o.getUsername()),直接执行orElseGet(() -> { return “李四”;})方法。如果不为null,则只执行map(o -> o.getName())方法。
还有一个跟orElseGet()类似的方法:orElse(),orElse()方法不管ofNullable()值是否为null,都会执行orElse()的代码,而orElseGet()方法只有在ofNullable()值为null时才会执行传入的函数。
- 示例2:
Optional.ofNullable(user).ifPresent(o -> o.setUsername("李四"));
如果user不为null,执行ifPresent()方法,否则不执行ifPresent()方法,这与orElseGet()用法刚好相反。
- 示例3
.查询用户信息,如果没有则新建用户,并将新建的用户信息返回
User user = Optional.ofNullable(
baseMapper.selectOne(
new QueryWrapper<User>()
.lambda()
.eq(User::getAlipayUserId, result.getUserId())
.eq(User::getDelFlag, false)
)).orElseGet(()-> {
User newUser = User.builder()
.relation(User.Relation.Unrelated)
.authentication(false)
.status(User.Status.Normal)
.updateUserId(User.DEFAULT_USER_ID)
.createUserId(User.DEFAULT_USER_ID)
.roles(User.ROLE_USER_INFO)
.alipayUserId(alipayUserId)
.build();
this.save(newUser);
return newUser;
});
- 示例4
Optional.ofNullable(
baseMapper.selectOne(new QueryWrapper<User>().lambda().eq(User::getMobileNumber, phone))
).filter(user -> {
if (StringUtils.isNotBlank(user.getAlipayUserId()) && user.getAlipayUserId().equals(userId)) {
return true;
}
baseMapper.physicalDeleteByUserId(userId);
baseMapper.update(new User(),
new UpdateWrapper<User>().lambda()
.set(User::getAlipayUserId, userId)
.set(User::getUpdateTime, LocalDateTime.now())
.eq(User::getMobileNumber, phone));
return true;
}).orElseGet(() -> {
baseMapper.update(new User(),
new UpdateWrapper<User>().lambda()
.set(User::getMobileNumber, phone)
.set(User::getUpdateTime, LocalDateTime.now())
.eq(User::getAlipayUserId, userId));
return null;
});
filter()方法的用法:只有Optional.ofNullable()不为空时,才会执行filter()方法,否则会直接执行orElseGet()方法。当执行filter()方法时,如果方法内返回true,则直接将Optional.ofNullable()的对象返回,如果方法内返回false,则继续执行orElseGet()方法。
上一篇: Optional常见用法汇总
下一篇: Optional