当前位置: 首页 > article >正文

java8Optional 使用

一、示例

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());
    }
}


http://www.kler.cn/a/555774.html

相关文章:

  • 阿里云如何协助解决操作系统兼容性问题
  • ASP.NET Core 简单文件上传
  • 007 HBuilderX提示IDE service port disabled. To use CLI Call, open IDE
  • No.40 蓝队 | 日志分析入门:Windows与Linux日志解析及攻击识别
  • 网络协议相关问题
  • go 通过ssh连接linux golang.org/x/crypto/ssh
  • Affinity Photo for Mac v2.6.0专业级修图软件 支持M、Intel芯片
  • linux编译器和自动化构建工具(gcc与Makeile)
  • 【PostgreSQL】如何通过调整PostgreSQL配置参数提高数据库性能
  • .NET + Vue3 的前后端项目在IIS的发布
  • 51c大模型~合集69
  • SpringBoot:SSL证书部署+SpringBoot实现HTTPS安全访问
  • MYSQL-数据库-DDL-DML-DQL-DCL-基础学习
  • 前端面试之Box盒子布局:核心知识与实战解析
  • 时间序列预测实战:指数平滑法详解与MATLAB实现
  • 蛋白分析工具和数据库
  • Uniapp 从入门到精通:界面设计与交互实现
  • java后端开发day18--学生管理系统
  • Windows自带Open SSH连接Cent OS
  • github 怎么创建一个私有repository 并从另外一台电脑拉取下来更新