java8Optional 使用

一、示例

java 复制代码
public class TestMain {


    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @ToString
    public static class Leader {

        private Long employeeId;
        private BigDecimal bonus;

    }

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @ToString
    public static class Employee {

        private Long id;
        private String name;
        private Boolean leader;

    }

    public static class FiltUtil {

        public void OptionalStudy() {
            Optional<Leader> leader = Optional.ofNullable(getEmployeeById(1L)
                    .filter(Employee::getLeader)
                    .map(Employee::getId)
                    .flatMap(this::getLeaderByEmployeeId)
                    .orElse(null));
            if (leader.isPresent()) {
                Optional.of(
                        leader.map(Leader::getBonus)
                                .map(bonus -> String.format("员工ID为1的leader奖金为:%s", bonus))
                                .orElse("员工ID为1的leader也没有奖金"))
                        .ifPresent(System.out::println);
            } else {
                System.out.println("员工ID为1的leader未找到,他可能只是一个基层员工,不配拥有奖金");
            }
        }

        private Optional<Employee> getEmployeeById(Long id) {
            //return Optional.of(new Employee(1L, "大老板", Boolean.TRUE));
            return Optional.of(new Employee(1L, "大老板", Boolean.FALSE));
        }

        private Optional<Leader> getLeaderByEmployeeId(Long employeeId) {
            //return employeeId == 1L ? Optional.of(new Leader(1L, BigDecimal.valueOf(1000000000))) : Optional.empty();
            return employeeId == 1L ? Optional.of(new Leader(1L, null)) : Optional.empty();
        }

    }

    public static void main(String[] args) {
//        FiltUtil filtUtil = new FiltUtil();
//        filtUtil.OptionalStudy();
        Employee employee = new Employee(null,"",true);
        //Optional.断言
//        Optional.ofNullable(employee.getId()).orElseThrow(()-> new IllegalArgumentException(String.format("%s人员的Id不能为NULL", employee.toString())));
        Optional.ofNullable(employee).filter(e-> StringUtil.isEmpty(e.getName())).orElseThrow(()-> new IllegalArgumentException(String.format("%s人员的name不能为空", employee.toString())));
        Optional.ofNullable(employee.getName()).orElseThrow(()-> new IllegalArgumentException(String.format("%s人员的name不能为空", employee.toString())));

        //Optional.非空判断
        Optional.ofNullable(employee).ifPresent(o -> o.setName("UNKNOW"));
        System.out.println(employee.toString());
    }
}
相关推荐
superlls8 分钟前
(场景题)Java 导出 Excel 的两种方式
java·开发语言·后端·excel
harmful_sheep15 分钟前
springMvc
java
一只小透明啊啊啊啊18 分钟前
Java电商项目中的概念: 高并发、分布式、高可用、微服务、海量数据处理
java·分布式·微服务
@LetsTGBot搜索引擎机器人1 小时前
Telegram 被封是什么原因?如何解决?(附 @letstgbot 搜索引擎重连技巧)
开发语言·python·搜索引擎·机器人·.net
沐欣工作室_lvyiyi3 小时前
基于Matlab的简易振动信号分析系统(论文+仿真)
开发语言·matlab·毕业设计·振动信号分析
2401_841495643 小时前
【数据结构】基于Prim算法的最小生成树
java·数据结构·c++·python·算法·最小生成树·prim
木井巳4 小时前
[Java数据结构和算法] HashMap 和 HashSet
java·数据结构·1024程序员节
祈祷苍天赐我java之术5 小时前
解析常见的限流算法
java·数据结构·算法
摇滚侠5 小时前
IDEA 启动前端项目 IDEA 切换分支
java·ide·intellij-idea
元直数字电路验证5 小时前
Jakarta EE开发中,如何配置IntelliJ IDEA的远程调试?
java·eureka·intellij-idea