当前位置: 首页 > 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…...

QQ音乐加密文件完整解码指南:qmcdump终极教程

QQ音乐加密文件完整解码指南&#xff1a;qmcdump终极教程 【免费下载链接】qmcdump 一个简单的QQ音乐解码&#xff08;qmcflac/qmc0/qmc3 转 flac/mp3&#xff09;&#xff0c;仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 还在为QQ音乐下…...

如何写 Skill

核心概念 Skill 是一个自包含的模块&#xff0c;用来给 Claude/Cascade 注入特定领域的知识、工作流和工具。本质上就是一个"新手入职指南"&#xff0c;让通用 AI 变成某个领域的专家。 目录结构 skill-name/ ├── SKILL.md # 必须&#xff0c;核心文件 └…...

Krita 5.3.0 与 6.0.0 发布:功能升级与技术革新

文本与工具革新&#xff0c;Krita 功能升级Krita 5.3.0 和 6.0.0 正式推出&#xff0c;带来了一系列显著的功能改进。文本工具被完全重写&#xff0c;支持在画布上进行所见即所得编辑&#xff0c;还能支持 OpenType 的所有特性以及文本置入形状&#xff0c;这大大提升了文字处理…...

连续“罢工“后编码风格突变!释放多个Agent相关岗位,DeepSeek大招来了?

文章目录前言编码风格突变&#xff0c;像换了个脑回路疯狂招兵买马&#xff0c;一口气放出17个Agent岗位Vibe Coding是个啥&#xff1f;给大脑装上灵活的"手脚"DeepSeek到底在憋什么大招&#xff1f;写在最后前言 你有没有试过&#xff0c;正在跟AI聊得火热&#xf…...

OpenClaw Exec Approvals 机制:在安全与效率之间寻找平衡

OpenClaw Exec Approvals 机制&#xff1a;在安全与效率之间寻找平衡当你第一次看到 /approve 弹窗时&#xff0c;是选择 allow-once 还是 allow-always&#xff1f;这个看似简单的决定&#xff0c;背后是安全与便利的永恒博弈。引言 在 Agent 开发和工作流自动化的世界里&…...

手把手教你用llama.cpp在树莓派上跑大模型(附完整配置流程)

在树莓派上部署llama.cpp的完整实践指南 树莓派作为一款价格亲民且功能强大的微型计算机&#xff0c;近年来在边缘计算和嵌入式AI领域崭露头角。本文将详细介绍如何在树莓派上部署llama.cpp这一轻量级大语言模型推理框架&#xff0c;让开发者能够在资源受限的环境中体验前沿AI技…...

前端开发者的福音:5分钟用Mergely.js给你的网页加个在线文本对比器

零成本打造专业级文本对比工具&#xff1a;Mergely.js全攻略 在代码审查、合同修订或是配置管理场景中&#xff0c;文本差异对比是个高频刚需。传统方案要么需要后端支持&#xff0c;要么功能简陋。现在&#xff0c;只需5分钟和几行JavaScript代码&#xff0c;你就能为Web项目嵌…...

如何用Mi-Create实现小米穿戴设备表盘个性化设计?

如何用Mi-Create实现小米穿戴设备表盘个性化设计&#xff1f; 【免费下载链接】Mi-Create Unofficial watchface creator for Xiaomi wearables ~2021 and above 项目地址: https://gitcode.com/gh_mirrors/mi/Mi-Create Mi-Create是一款专为2021年及以后发布的小米穿戴…...

STM32F407ZGT6最小系统:从原理图到PCB的实战设计解析

1. STM32F407ZGT6最小系统设计入门 第一次接触STM32F407ZGT6最小系统设计时&#xff0c;我也被各种专业术语和复杂的电路图搞得晕头转向。但经过几个项目的实战后&#xff0c;我发现只要掌握几个关键模块&#xff0c;设计一个稳定可靠的最小系统其实并不难。STM32F407ZGT6是STM…...

React - useEffect、useRef、Fragment

一、useEffect 1、基本介绍 useEffect 用于在函数式组件中执行副作用操作&#xff0c;用于替代类组件中的生命周期钩子 useEffect(() > {// 副作用操作return () > {// 清理函数&#xff08;可选&#xff09;}; }, [依赖项数组]);副作用操作&#xff1a;发送请求数据获取…...