无参数,返回一个结果。
|
| 37 | ToDoubleBiFunction<T,U>
接受两个输入参数,返回一个double类型结果
|
| 38 | ToDoubleFunction
接受一个输入参数,返回一个double类型结果
|
| 39 | ToIntBiFunction<T,U>
接受两个输入参数,返回一个int类型结果。
|
| 40 | ToIntFunction
接受一个输入参数,返回一个int类型结果。
|
| 41 | ToLongBiFunction<T,U>
接受两个输入参数,返回一个long类型结果。
|
| 42 | ToLongFunction
接受一个输入参数,返回一个long类型结果。
|
| 43 | UnaryOperator
接受一个参数为类型T,返回值类型也为T。
|
除了上面列出的,还有个别函数接口没列出来,例如Comparator(), 但总归是个函数接口都会基于FunctionalInterface注解
总结
这些函数主要还是分为几个主要函数,其余都是以其为基础的分化;
-
Supplier 无参数,返回一个结果。
-
Consumer 代表了接受一个输入参数并且无返回的操作。
-
Function<T,R> 接受一个输入参数,返回一个结果,返回的结果跟参数的类型无关。
-
Predicate 接受一个输入参数,返回一个布尔值结果。
-
BinaryOperator 代表了一个作用于于两个同类型操作符的操作,并且返回了操作符同类型的结果,xxxOperator 函数都是接受类型跟返回值类型相同。
而且,从上面五个主要函数接口命名也可以看出其作用,"Bi"作为前缀的都是属于二元操作,接受两个参数。
T1to_T2_是从接受T1类型参数,返回T2类型结果,比如IntToLongFunction 接受一个int类型参数,返回long类型结果。
实战1
下面我写了一个功能,拳击手有分组跟体重两个属性,然后给一组拳击手集合,根据小组或者体重级排序,用到的是Comparator(),也是一个函数接口
上码:
-
/**
-
* Created by zhanghe
-
* 拳击手
-
*/
-
public class Boxer {
-
//分组
-
private String group;
-
//重量级
-
private Integer weight;
-
public Boxer(String group, Integer weight) {
-
this.group = group;
-
this.weight = weight;
-
}
-
public static <T> List<List<T>> divider(List<T> datas, Comparator<T> c) {
-
//声明一个列表来接收各个分组
-
List<List<T>> list = new ArrayList<>();
-
for (T t : datas) {
-
//通过isSameGroup 标识来判断分组是否已创建
-
boolean isSameGroup = false;
-
for (int i = 0; i < list.size(); i++) {
-
//compare函数返回值为int,正数说明param1>param2,0说明param1=param2,负数说明param1<param2
-
//这里用到的原理是将List列表datas中的各项与分组列表list中的元素比较(比较的规则由外面作为参数传递,这就是函数式编程),
-
// 值为0表示规则相符即为同一组
-
if (c.compare(t, list.get(i).get(0)) == 0) {
-
isSameGroup = true;
-
list.get(i).add(t);
-
break;
-
}
-
}
-
//比较完了发现没有规则相符的,即自成一系
-
if (!isSameGroup) {
-
List<T> e = new ArrayList<>();
-
e.add(t);
-
list.add(e);
-
}
-
}
-
return list;
-
}
-
public static void main(String[] args) {
-
List<Boxer> boxers = Arrays.asList(
-
new Boxer("红队", 120),
-
new Boxer("绿队", 180),
-
new Boxer("蓝队", 200),
-
new Boxer("绿队", 220),
-
new Boxer("蓝队", 120),
-
new Boxer("红队", 80),
-
new Boxer("红队", 90),
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
总结
无论是哪家公司,都很重视高并发高可用的技术,重视基础,重视JVM。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。
最后我整理了一些面试真题资料,技术知识点剖析教程,还有和广大同仁一起交流学习共同进步,还有一些职业经验的分享。
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
GkJT-1712258518835)]
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算