当前位置: 首页 > 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))));}
}

相关文章:

函数式接口当参数使用

如果函数式接口作为一个方法的参数&#xff0c;就以为着要方法调用方自己实现业务逻辑&#xff0c;常见的使用场景是一个业务整体逻辑是不相上下的&#xff0c;但是在某一个步骤有不同的逻辑&#xff0c;例如数据处理有不同的策略&#xff0c;如果有大量的if-els&#xff0c;或…...

全面详解Maven的配置文件settings.xml

全面详解Maven的配置文件settings.xml setting文件位置maven多仓库查找依赖的顺序大致如下&#xff1a;基本配置选项localRepository(本地仓库设置)mirrors(镜像设置)servers(服务器)Profiles(配置文件)Active Profiles(激活配置文件Profiles的Profile) Maven是一个用于构建和管…...

【Spring连载】使用Spring Data访问Redis(十四)----Redis Repositories

【Spring连载】使用Spring Data访问Redis&#xff08;十四&#xff09;----Redis Repositories 一、Core concepts二、Defining Repository Interfaces三、Creating Repository Instances四、Usage五、Object Mapping Fundamentals六、对象到Hash映射Object-to-Hash Mapping七、…...

小鹏汽车穿越“生死线”

文&#xff5c;刘俊宏编&#xff5c;王一粟 “颠覆与涅槃&#xff0c;颠覆自我与重新涅槃&#xff0c;让企业在变革中更完美的蜕变。” 2024新年伊始&#xff0c;小鹏汽车董事长兼CEO何小鹏对2023年的蜕变显然非常刻骨铭心。无论是在汽车新势力&#xff0c;还是放眼整个中国汽…...

AIPC专题:深耕笔电背光模组领域,AIPC与车载显示拉动公司成长

今天分享的是AIPC系列深度研究报告&#xff1a;《AIPC专题&#xff1a;深耕笔电背光模组领域&#xff0c;AIPC与车载显示拉动公司成长》。 &#xff08;报告出品方&#xff1a;东兴证券&#xff09; 报告共计&#xff1a;19页 公司深耕笔电背光模组&#xff0c;主要下游客户为…...

架构(十一)从0到1实现动态定时任务

一、引言 作者的平台项目最近需要实现一个功能&#xff0c;用户可选择这个任务什么时候执行&#xff0c;执行频率是什么&#xff1f; 这其实就是一个定时任务&#xff0c;只不过需要动态的&#xff0c;让用户自由选择。 二、原生实现 要实现这样的功能&#xff0c;可以直接依赖…...

Mybatis 批量插入数据 SQL

温故而知新&#xff0c;这里记录一下 案例1 批量插入时&#xff0c;xxxMapper.java 中方法的参数都必须是 List &#xff0c;泛型可以是 bean &#xff0c;也可以是 Map 。配合使用 mybatis 的 foreach 即可。示例如下&#xff1a; public Integer batchInsertDemo(List<D…...

【学员分享-考试心得】国产数据库潜力无限,云贝教育OBCP认证培训帮您解难题

近年来&#xff0c;随着国产化转型的推进&#xff0c;国外数据库的岗位需求逐渐减少&#xff0c;让许多IT从业者倍感压力。在这种情况下&#xff0c;了解国产数据库成为了求职市场上的竞争力。云贝老师们将聚焦于OceanBase、PostgreSQL、TDSQL等IT培训&#xff0c;探讨其对国产…...

【Mysql】事务的隔离级别与 MVCC

事务隔离级别 我们知道 MySQL 是一个 C/S 架构的服务&#xff0c;对于同一个服务器来说&#xff0c;可以有多个客户端与之连接&#xff0c;每个客户端与服务器连接上之后&#xff0c;就是一个会话&#xff08; Session &#xff09;。每个客户端都可以在自己的会话中向服务器发…...

MongoDB从入门到实战之MongoDB快速入门

前言 上一章节主要概述了MongoDB的优劣势、应用场景和发展史。这一章节将快速的概述一下MongoDB的基本概念&#xff0c;带领大家快速入门MongoDB这个文档型的NoSQL数据库。 MongoDB从入门到实战的相关教程 MongoDB从入门到实战之MongoDB简介&#x1f449; MongoDB从入门到实战…...

Linux服务详解

如有错误或有补充&#xff0c;以及任何改进的意见&#xff0c;请在评论区留下您的高见&#xff0c;同时文中给出大部分命令的示例&#xff0c;即是您暂时无法在Linux中查看&#xff0c;您也可以知道各种操作的功能以及输出 如果觉得本文写的不错&#xff0c;不妨点个赞&#x…...

闲聊电脑(4)硬盘分区

夜深人静&#xff0c;万籁俱寂&#xff0c;老郭趴在电脑桌上打盹&#xff0c;桌子上的小黄鸭和桌子旁的冰箱又开始窃窃私语…… 小黄鸭&#xff1a;冰箱大哥&#xff0c;上次你说的那个“分区”和“格式化”是什么意思&#xff1f; 冰箱&#xff1a;分区么&#xff0c;就是分…...

光耦合器的结构与原理解析

光耦合器是一种重要的电光转换器件&#xff0c;广泛应用于电子设备、通信系统以及工业控制等领域。本文将深入分析光耦合器的结构与原理&#xff0c;旨在为读者提供清晰而全面的了解。 光耦合器作为一种关键的电子元件&#xff0c;扮演着信号隔离和传输的重要角色。它的设计结构…...

代码随想录day17--二叉树的应用5

LeetCode654.最大二叉树 题目描述&#xff1a; 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后…...

跟着cherno手搓游戏引擎【19】抽象纹理

引入&#xff1a; 导入stb_image: GitHub - nothings/stb: stb single-file public domain libraries for C/C 下载复制stb_image.h的内容&#xff08;8000多行&#xff09;&#xff0c;然后粘到如图位置 stb_image.cpp: #include"ytpch.h" #define STB_IMAGE_IM…...

CentOS 7中搭建NFS文件共享服务器的完整步骤

CentOS 7中搭建NFS文件共享服务器的完整步骤 要求&#xff1a;实现镜像文件共享&#xff0c;并基于挂载的共享目录配置yum源。 系统环境&#xff1a; 服务器&#xff1a;172.20.26.167-CentOS7.6 客户端&#xff1a;172.20.26.198-CentOS7.6 1、在服务器和客户端上&#x…...

【华为OD机试】 最小矩阵宽度【2024 C卷|100分】

【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 给定一个矩阵,包含 N * M 个整数,和一个包含 K 个整数的数组。 现在要求在这个矩阵中找一个宽度最小的子矩阵,要求子矩阵包含数组中所有的整数。 输入描述 第一行输入两个正整数 N,M,…...

Ingress

文章目录 环境准备什么是 Ingress认识 Ingress 资源Ingress 控制器(controller)Ingress 规则pathType 路径类型多重匹配Ingress 类TLS生成证书创建密钥 环境准备 下面的 yaml 文件内容&#xff0c;是使用 sts 创建两个 web 服务&#xff0c;并配置对应的 servcie。web 服务的首…...

MySQL数据库安全加固方案

数据库版本:MySQL8.0.22 按照本安全加固方案进行的数据库加固,一般安全扫描工具扫描出来几乎无漏洞。 1.2 帐号安全 1.2.1 避免不同用户间共享帐号 参考以下步骤。 A. 创建用户。 mysql>CREATE USER ‘用户名’@‘用户 host’ IDENTIFIED BY ‘密码’; 执行以上命令可以…...

实践:读取html文本提取相应内容按照格式导出到excel中

最近在做一个需求&#xff0c;需要将html文本中的内容提取出来&#xff0c;然后导出到excel里面&#xff0c;实现交代情景&#xff0c;html文本中存在许多标签&#xff0c;且很乱&#xff0c;因此需要之间将标签里面的文本提取出来&#xff0c;再进行处理。 ............String…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...