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

函数式接口当参数使用

如果函数式接口作为一个方法的参数,就以为着要方法调用方自己实现业务逻辑,常见的使用场景是一个业务整体逻辑是不相上下的,但是在某一个步骤有不同的逻辑,例如数据处理有不同的策略,如果有大量的if-els,或者switch-case还可以结合工厂模式消除这些分支代码。上代码

package com.dj.lambda;import java.util.List;
import java.util.function.Function;/*** User: ldj* Date: 2024/1/28* Time: 14:57* Description: 业务模板*/
public class LambdaTemplate {public Object execute(List<Integer> data, Function<List<Integer>, Object> function) {connect();request();return invokeHandler(data, function);}//步骤一private void connect() {System.out.println("连接成功");}//步骤二private void request() {System.out.println("获取数据成功");}//步骤三  只有这里不同,处理数据有不同的处理策略 (假设apply方法有很多复杂的业务逻辑)private Object invokeHandler(List<Integer> data, Function<List<Integer>, Object> function) {return function.apply(data);}
}

数据处理不同的策略:

package com.dj.lambda;import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;/*** User: ldj* Date: 2024/1/28* Time: 15:26* Description: list元素去重*/
public class DistinctHandler implements Function<List<Integer>, Object> {@Overridepublic Object apply(List<Integer> integers) {return integers.stream().distinct().collect(Collectors.toList());}
}package com.dj.lambda;import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;/*** User: ldj* Date: 2024/1/28* Time: 15:21* Description: 统计list相同元素出现的次数*/
public class StatisticsHandler implements Function<List<Integer>, Object> {@Overridepublic Object apply(List<Integer> integers) {return integers.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));}
}
package com.dj.lambda;import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.stream.Collectors;/*** User: ldj* Date: 2024/1/28* Time: 15:42* Description: No Description*/
public class Test {public static void main(String[] args) {List<Integer> list = Arrays.asList(1, 1, 1, 4, 2, 5, 3, 6);LambdaTemplate lambdaTemplate = new LambdaTemplate();//1.像这种业务比较复杂,代码比较多的建议写实现类,比如策略类System.out.println(lambdaTemplate.execute(list, new StatisticsHandler()));System.out.println(lambdaTemplate.execute(list, new DistinctHandler()));//2.如果是简单的,直接使用lambda表达式书写更为合适System.out.println(lambdaTemplate.execute(list, els-> els.stream().sorted().collect(Collectors.toList())));System.out.println(lambdaTemplate.execute(list, els -> els.stream().sorted().collect(Collectors.toCollection(LinkedHashSet::new))));}
}

http://www.lryc.cn/news/292790.html

相关文章:

  • 全面详解Maven的配置文件settings.xml
  • 【Spring连载】使用Spring Data访问Redis(十四)----Redis Repositories
  • 小鹏汽车穿越“生死线”
  • AIPC专题:深耕笔电背光模组领域,AIPC与车载显示拉动公司成长
  • 架构(十一)从0到1实现动态定时任务
  • Mybatis 批量插入数据 SQL
  • 【学员分享-考试心得】国产数据库潜力无限,云贝教育OBCP认证培训帮您解难题
  • 【Mysql】事务的隔离级别与 MVCC
  • MongoDB从入门到实战之MongoDB快速入门
  • Linux服务详解
  • 闲聊电脑(4)硬盘分区
  • 光耦合器的结构与原理解析
  • 代码随想录day17--二叉树的应用5
  • 跟着cherno手搓游戏引擎【19】抽象纹理
  • CentOS 7中搭建NFS文件共享服务器的完整步骤
  • 【华为OD机试】 最小矩阵宽度【2024 C卷|100分】
  • Ingress
  • MySQL数据库安全加固方案
  • 实践:读取html文本提取相应内容按照格式导出到excel中
  • oracle 修改表结构语句
  • LabVIEW核能设施监测
  • 使用Process.Start()打开文件夹时出现访问被拒绝异常
  • spdk技术原理简介和实践经验
  • 【开源】基于JAVA+Vue+SpringBoot的用户画像活动推荐系统
  • 023 for循环详解
  • 舟山长寿医学中心:引领生命科技前沿
  • springboot 整合 PowerJob实现定时任务调度
  • 【C语言】通讯录实现(下)
  • 数据结构与算法面试系列-03
  • elk之基本crud