• 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 Optional of(T value)
    empty返回空Optional对象public static Optional empty()
    ofNullable将value封装为Optional对象,为null则将返回空对象public static Optional ofNullable(T value)

    2、null值判断处理

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

    public T orElseGet(Supplier other)

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

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

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

    使用场景

    1. @Data
    2. @Builder
    3. @NoArgsConstructor
    4. @AllArgsConstructor
    5. public class User {
    6. private Long id;
    7. private String name;
    8. }

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

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

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

    1. //之前
    2. if (Objects.nonNull(user)) {
    3. return user.getId();
    4. } else {
    5. return 0L;
    6. }
    7. //替换
    8. Optional.ofNullable(user).map(User::getId).orElse(0L);

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

    1. //之前
    2. if (Objects.nonNull(user)) {
    3. System.out.println(user.getId() + "_" + user.getName());
    4. }
    5. //替换
    6. Optional.ofNullable(user).ifPresent(user1 -> System.out.println(user1.getId() + "_" + user1.getName()));

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

    1. //之前
    2. List filterUsers = list.stream().filter(user1 -> "张三".equals(user1.getName())).collect(Collectors.toList());
    3. if (CollectionUtils.isNotEmpty(filterUsers)) {
    4. User user = filterUsers.get(0);
    5. System.out.println(user.getId() + "_" + user.getName());
    6. }
    7. //替换
    8. Optional filterUsers = list.stream().filter(user1 -> "张三".equals(user1.getName())).findAny();
    9. if (filterUsers.isPresent()) {
    10. User user = filterUsers.get();
    11. System.out.println(user.getId() + "_" + user.getName());
    12. }

  • 相关阅读:
    亮点“剧透”丨一年一度的开发者盛会观看指南
    mysql高手进阶优化篇
    Codeforces Round #787 (Div. 3) F. Vlad and Unfinished Business
    深度解读js中数组的findIndex方法
    Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
    【开源】SpringBoot框架开发人事管理系统
    Redis从基础到进阶篇(三)----架构原理与集群演变
    xgp怎么取消续费 微软商店xgp会员取消自动续费详细教程
    Kafka 典型问题与排查以及相关优化
    打造千万级流量秒杀第二十课 etcd 实战:如何使用 etcd 存储配置信息?
  • 原文地址:https://blog.csdn.net/tec_1535/article/details/126038331