zoukankan      html  css  js  c++  java
  • java函数式编程Consumer,Supplier,Function

    代码示例

    @Slf4j
    public class DemoJavaFunction {
        public static void main(String[] args) {
            // 第一步:模拟入参数据的准备
            Supplier<DemoJavaFunction.DemoInput> supplier = ()->{
                DemoJavaFunction.DemoInput input = new DemoJavaFunction.DemoInput();
                input.setId(100);
                input.setInputMsg("inputMsg_value");
                input.setMsg("消息");
                input.setFlag(true);
                return input;
            };
    
            //第二步:Function作用:函数编程入参和业务中间数据流的转换
            Function<DemoJavaFunction.DemoInput, DemoJavaFunction.DemoDto> function = input -> {
                DemoJavaFunction.DemoDto demoDto = new DemoJavaFunction.DemoDto();
                demoDto.setMsg(input.getMsg()+":Function");
                demoDto.setId(input.getId());
                demoDto.setInputMsg("数据正在处理");
                demoDto.setInterState("中间状态");
                return demoDto;
            };
    
            //第三步:出参数据业务操作
            DemoJavaFunction.DemoOutput output = new DemoJavaFunction.DemoOutput();
            Consumer<DemoJavaFunction.DemoDto> consumer = input -> {
                log.info("Consumer flag is true input:{}", input);
                output.setId(input.getId());
                output.setMsg(input.getMsg());
                output.setInterState(input.getInterState());
                output.setFlag(input.getFlag());
                output.setOutputFlag("OutputFlag出参数");
    
            };
            //第四步:业务逻辑调用
            BiConsumer<Consumer<DemoJavaFunction.DemoDto>, DemoJavaFunction.DemoDto> biConsumer = (callback, value) -> {
                for(int i = 0; i < 10; i++){
                    //回调第三步操作
                    callback.accept(value);
                }
            };
    
            //第五步:注意生产者到双向消费者执行过程
            biConsumer.accept(consumer, function.apply(supplier.get()));
            log.info("output:{}", output);
            //断言操作
            Predicate<String> predicate = (x)-> "A".equals(x);
            System.out.println(predicate.test("B"));
        }
    
    
    
        @Data
        @NoArgsConstructor
        @AllArgsConstructor
        static class DemoEntity{
            private Integer id;
            private String msg;
            private Boolean flag;
        }
    
        @Data
        @NoArgsConstructor
        @AllArgsConstructor
        static class DemoInput{
            private Integer id;
            private String msg;
            private Boolean flag;
            private String inputMsg;
        }
    
        @Data
        @NoArgsConstructor
        @AllArgsConstructor
        static class DemoDto{
            private Integer id;
            private String msg;
            private Boolean flag;
            private String inputMsg;
            private String interState;
        }
    
        @Data
        @NoArgsConstructor
        @AllArgsConstructor
        static class DemoOutput{
            private Integer id;
            private String msg;
            private Boolean flag;
            private String interState;
            private String outputFlag;
        }
    }
    美梦成真,变为事实。
  • 相关阅读:
    使用LR编写windows sockets协议xml报文格式脚本实战
    使用LR编写HTTP协议Json报文格式接口脚本实战
    web类协议脚本-飞机订票系统示例
    使用LR编写下载类脚本
    python算法-选择排序
    python算法-冒泡排序
    用户在浏览器中输入一个url发生的奥秘
    浅谈cookie和session
    selenium加载配置参数,让chrome浏览器不出现‘Chrome正在受到自动软件的控制’的提示语,以及后台静默模式启动自动化测试,不占用桌面的方法
    Python之文件和目录操作
  • 原文地址:https://www.cnblogs.com/x-ll123/p/14850382.html
Copyright © 2011-2022 走看看