Java8 Optional使用整理

目录

方法定义

1、获取与封装

2、null值判断处理

3、value处理

使用场景


java.util.Optional

方法定义

1、获取与封装

get获取Optional的value,为null则抛出NoSuchElementException异常

public T get() 

of将value封装为Optional对象,为null则抛出NullPointerException异常public static <T> Optional<T> of(T value)
empty返回空Optional对象public static<T> Optional<T> empty()
ofNullable将value封装为Optional对象,为null则将返回空对象public static <T> Optional<T> ofNullable(T value)

2、null值判断处理

isPresent不为null返回true,否则返回falsepublic boolean isPresent() {
    return value != null;
}
ifPresentvalue不为null则使用该值调用指定的使用者public void ifPresent(Consumer<? super T> consumer)
orElse若对象的value不为null返回value,否则返回otherpublic T orElse(T other)
orElseGet若对象的value不为null返回value,否则返回other.get()

public T orElseGet(Supplier<? extends T> other)

orElseThrow若对象的value不为null返回value,否则supplier创建的异常public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier)

3、value处理(转换/过滤)

filter如果值存在,返回条件筛选后的Optional对象,否则返回空对象public Optional<T> filter(Predicate<? super T> predicate)
map如果值存在,就对该值执行提供的mapping函数调用public<U> Optional<U> map(Function<? super T, ? extends U> mapper)
flatMap如果值存在,就执行flatmap函数

使用场景

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {

    private Long id;
    private String name;
}

场景1:user对象不为空,获取id,为空需要返回0

//之前
Objects.isNull(user.getId()) ? 0L : user.getId();
//替换
Optional.ofNullable(user.getId()).orElse(0L);

场景2:如果user不为空,返回用户ID,为空需要返回0

//之前
if (Objects.nonNull(user)) {
    return user.getId();
} else {
    return 0L;
}

//替换
Optional.ofNullable(user).map(User::getId).orElse(0L);

场景3:如果user不为空,输出用户ID+用户name下划线隔开

//之前
if (Objects.nonNull(user)) {
    System.out.println(user.getId() + "_" + user.getName());
}

//替换
Optional.ofNullable(user).ifPresent(user1 -> System.out.println(user1.getId() + "_" + user1.getName()));

场景4:找一个名叫张三的用户

//之前
List<User> filterUsers = list.stream().filter(user1 -> "张三".equals(user1.getName())).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(filterUsers)) {
    User user = filterUsers.get(0);
    System.out.println(user.getId() + "_" + user.getName());
}

//替换
Optional<User> filterUsers = list.stream().filter(user1 -> "张三".equals(user1.getName())).findAny();
if (filterUsers.isPresent()) {
    User user = filterUsers.get();
    System.out.println(user.getId() + "_" + user.getName());
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值