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

JAVA Function

Function 是什么

相当于一个黑箱,放在哪儿,规定了,放入箱子的东西和箱子输出的东西是什么,当你有一个业务中,前后逻辑固定,但是中间的某些操作不固定的时候,可以用。

其实
List<String> test1 = Arrays.asList("325134514365437", "797683512413241253");
List<Integer> test2=  test1.stream().map(Integer::valueOf).collect(Collectors.toList());

也是可以写成

List<String> test1 = Arrays.asList("325134514365437", "797683512413241253");
Function<String,Integer> test3 = p->Integer.valueOf(p);
List<Integer> test2=  test1.stream().map(test3).collect(Collectors.toList());

在这里的逻辑就是,获取test2的一个数据->被map处理->下一个数据->被map处理

而这里map中的处理就可以根据自己的需求调整。

差不多就这么个事儿。

Function 使用场景

最简单的,最常见的,List.stream的流处理(如上),比如类型转换,或者数据处理。

以下距离并用代码说明一个案例

比如当前有一个业务逻辑,有实体类,ABCD。

规定当我们想要获取ABCD内的内容的时候,需要获取对应类的token来验证后,才能获取和返回对应的东西。(A.getToken1,A.getToken2,A.getToken3,A.getToken4)

这时候,我的流程就是

先定义结果要用的实体类

@Data
class a{
private String data;
private String id;
private String token;
}

@Data
class b{
private String price;
private String sales;
private String token;
}

然后定义Function逻辑

 public static <T, R> R fetchAndLog(T entity,//需要被处理的实体类
Function<T, String> getT, // 不确定的Token获取方法,这里规定了Token只能是String,也就是getT操作返回的只能是string 的
Function<T, R> getP // 不确定的内容获取方法
) {
String T = getT.apply(entity);//这里entity对应 Function<T, String>的T,也就是输入的类。
//然后就是多token的验证,但是这里简化一下,只要全是数字就给过
if(!T.matches("^\\d+$")){
throw new IllegalStateException("token错误,请检查");
}else {
//把实体类作为参数塞入Function,执行不确定的获取方法
return getP.apply(entity);
}
}

最后使用它们

 public static void main(String[] args) {
a aTest = new a();
b bTest = new b();
//aTest和bTest中间参数加载过程省略


System.out.println(fetchAndLog(aTest,a::getToken,a::getData));
//或者写成
Function<a,String> at = a-> a.getToken();
Function<a,String> ad = a-> a.getData();
System.out.println(fetchAndLog(aTest,at,ad));

        //b类的
System.out.println(fetchAndLog(bTest,b::getToken,b::getPrice));
//或者写成
Function<b,String> bt = b-> b.getToken();
Function<b,String> bd = b-> b.getPrice();
System.out.println(fetchAndLog(bTest,bt,bd));

    }

如果不使用Function,那就需要写成

//添加方法

private static boolean token(String s){if(!s.matches("^\\d+$")){throw new IllegalStateException("token错误,请检查");}else {//把实体类作为参数塞入Function,执行不确定的获取方法return true;}
}

然后直接写逻辑

public static void main(String[] args) {a aTest = new a();b bTest = new b();//aTest和bTest中间参数加载过程省略if (token(aTest.getToken())) {System.out.println(aTest.getData());}if (token(bTest.getToken())) {System.out.println(bTest.getPrice());}
}

每次你都需要再写一个if (token(bTest.getToken()))但是如果使用了Function就可以省略这一步。

http://www.dtcms.com/a/588832.html

相关文章:

  • MyBatis-Plus 通用 CRUD 操作全景指南
  • 公司网站建设 意义水果营销软文
  • Ernie_health + ProtoNet + Supervised-Contrastive Learning实现小样本意图分类与槽位填充
  • Rust + WebAssembly:让嵌入式设备被浏览器调试
  • 从 LinkedList 血案说起:用 3W 法搭建数据结构知识框架
  • rust操作stm32f1ct86
  • 深入理解大语言模型(6)-Prompt 注入 Prompt 注入
  • Data Mining Tasks|数据挖掘任务
  • rspack为什么能提速?底层逻辑是什么?
  • 深度学习十种食物分类系统1:数据集说明(含下载链接)
  • 应用层协议HTTP(1)
  • mongodb总结
  • seo网站排名厂商定制莱州网站制作
  • web网页开发,在线%聚类,微博,舆情%系统,基于python,pycharm,django,nlp,kmeans,mysql
  • 大型语言模型推理能力评估——李宏毅2025大模型课程第9讲内容
  • WPS国际版18.22 | 集Word,PDF,Sheet,PowerPoint于一体的多功能免费办公套件
  • RHCE DNS实验作业
  • 深圳网站备案wordpress 界面 阴影
  • 【STL源码剖析】从源码看 heap:元素的 “下沉” 与 “上浮”
  • 【LLM】LLaMA-Factory 训练模型入门指南
  • DTrac Rotor
  • 06 Activiti 与 Spring Boot 整合
  • 分布式专题——49 SpringBoot整合ElasticSearch8.x实战
  • 18_FastMCP 2.x 中文文档之FastMCP服务端高级功能:后端存储详解
  • 基于Spring Boot的社团服务系统的设计与实现
  • Spring Boot配置文件加载顺序详解(含Nacos配置中心机制)
  • 基于React+Flask前后端分离的文件搜索系统
  • K8s 集群部署中间件 - yaml 版本(二)
  • zmaiFy音频转录介绍
  • 学校资源网站建设目标关于做电商网站导流项目