Comparator为何是函数式接口?

Compable和Comparator自定义对象属性排序 可以通过两种方式自定义对象的属性大小进行比较,对一个list或数组对根据属性排序一个list或数组 立即下载

Functional Interface

Java SE 8中重磅推出了lambda表达式,为了实现lambda进而又新增了函数式接口:对于只有一个抽象方法的接口,需要这种接口的对象时,就可以提供一个lambda表达式,这种接口称为函数式接口(functional interface)

Java的函数式接口与函数式编程有着重要的联系。函数式编程最大的特点就是函数(function)作为一等公民。所谓一等公民,说明了它在编程语言中的重要性。我们的传统语言中大部分是将值作为一等公民,而函数方法大多以API的方式去处理和传递值,类和结构体就像一个包裹,他们负责如何去组合值。函数式编程让函数和值收到了平等对待。

Java最开始也是将值作为一等公民,但随着函数式编程的流行以及它带来的方便受人喜爱,Java在JDK1.8版本中推出了函数式编程的解决方法,函数式接口。Java作为一门高级语言,有着极高的安全性,但没有C/C++这种底层语言所具有的灵活性,在C/C++中可以传递一个函数的引用地址,进而将函数地位提升,升级到一等公民的地位。但是在Java中没有指针,所以Java中传递函数就变得困难。但是Java可以通过函数式接口的方式结合lambda表达式实现函数式编程。

Comparator为何是函数式接口?

介绍完了函数式接口,问题回来了,为何Comparator是函数式接口呢?来看Comparator的源码。

@FunctionalInterface
public interface Comparator<T> {
	
	int compare(T o1, T o2);

	boolean equals(Object obj);

	default Comparator<T> reversed() {
        return Collections.reverseOrder(this);
    }

    public static <T> Comparator<T> nullsFirst(Comparator<? super T> comparator) {
        return new Comparators.NullComparator<>(true, comparator);
    }

    ....
    ....
    ....
}

可以看到,明明有好多方法呀!?再细看,equals是Object中的方法,这种对Object类的方法的重新声明会让方法不再是抽象的。(Java API中的一些接口会重新声明Object方法来附加javadoc注释。)更重要的是,JDK1.8中,接口可以声明非抽象方法了,例如上面代码中的default方法和static方法,且方法中可以有具体实现!!!这是JDK1.8的一个重要的变化。。记住。最后就只有一个抽象方法compare了,所以Comparator是符合函数式接口规范的。

【73页PPT】美的简单高效的管理逻辑(附下载方式) 其科技领先战略依托四级研发体系(中央研究院、事业部、前沿技术、产品开发)与 “三个一代” 模式(开发一代、储备一代、研究一代),构建全球研发布局(“2+4+N” 体系,含顺德、上海双总部,美、德、意、日四大研发中心及分布式创新节点),研发投入强度持续提升。MBS(美的精益运营体系)以 “12345” 为方法论:始于客户需求,借鉴顶级企业实践,以战略部署、人才育成、日常管理为核心,追求质量、交付、成本、创新四大目标,通过精益五步法(定价值、析流、促流动、拉系统、尽善美)实现全链条优化。 阅读详情

相关推荐

手把手教你用Apollo Dreamview调试自动驾驶感知模块(附数据包下载)

本文详细介绍了如何使用百度Apollo平台的Dreamview工具调试自动驾驶感知模块,包括环境配置、数据加载、感知问题定位和多传感器融合调试等关键步骤。通过实战案例和参数调整技巧,帮助开发者快速掌握自动驾驶感知模块的调试方法,提升开发效率。

weixin_29084111的博客 139

compable和comparator

public interface Comparable<T> { public int compareTo(T o); } Comaprable是一个接口,接口中只有一个方法那就是compareTo(),通过返回一个int类型的值来表示大小;java中常见的值类,Interger、Double等类都实现了该方法来进行数值大小的比较; public interface Comp...

lovesman的博客 646

深入解析Cuk、Zeta和Sepic拓扑:非隔离型开关电源的设计奥秘

本文深入解析了Cuk、Zeta和Sepic三种非隔离型开关电源拓扑的设计奥秘。它们均能实现升降压转换,但特性各异:Cuk拓扑输出反向电压,输入输出纹波极低;Sepic拓扑输出同极性电压,应用广泛;Zeta拓扑输出纹波小,适合精密供电。文章详细对比了其电路结构、工作原理、核心公式及选型指南,帮助工程师根据输入电压范围、输出极性及纹波要求,灵活选择最合适的拓扑方案。

weixin_28308325的博客 478

Java函数式接口的一个疑惑:为什么Comparator接口有两个抽象方法compare和equals,Comparator还是一个函数式接口?

Java函数式接口的一个疑惑:为什么Comparator接口有两个抽象方法compare和equals,Comparator还是一个函数式接口?(@FunctionalInterface)_H_X_P_的博客-优快云博客 重写了超类Object类中任意一个public方法的方法并不算接口中的抽象方法。 所以虽然Comparator接口中有两个抽象方法compare和equals,但equals并不算入接口中的抽象方 法,所以Comparator接口还是满足函数式接口的要求,Comparator接口是

兴趣是最好的老师 638

MicroPython跨平台移植实战:从源码解析到STM32+FreeRTOS部署

本文详细解析了MicroPython的跨平台移植实战,重点介绍了如何将其从源码开始,成功部署到STM32微控制器并运行于FreeRTOS实时操作系统。内容涵盖源码结构解析、编译环境搭建、内存管理协调、FreeRTOS任务集成、数学库(math)启用与优化,以及自定义模块开发等核心步骤,为开发者提供了一套完整的、可操作的嵌入式Python移植方案。

vodka的博客 1014

500多种目标检测数据集下载地址汇总(YOLO、VOC)

【目标检测】红外物体检测-人、自行车、公交、小车、摩托车、骑行者、动物等15000张YOLO+VOC(含部分截取增强图).zip。【目标检测】医用个人防护装备检测数据集981张5类别(口罩、工作服、护目镜、手套、面罩检测数据集)VOC+YOLO格式.zip。【目标检测】车辆分类数据集1880张7类VOC+YOLO(含摩托车、救护车、消防车、警车、警用摩托车、轿车、大车).zip。【目标检测】隐翅虫数据集386张VOC+YOLO【目标检测】隐翅虫数据集386张VOC+YOLO【目标检测】隐翅虫数据集。

2401_85863780的博客 9159

Comparator为什么是函数式接口

在了解这个问题之前,首先要知道什么是函数式接口 函数式接口(Functional Interface)就是接口里面只可以有一个抽象的方法,但是可以有多个非抽象方法。 在注解@FuctionalInterface(自动检测是否为函数式接口)的javadoc中如下说明 Conceptually, a functional interface has exactly one abstract method. Since {@linkplain java.lang.reflect.Method#isDefaul

weixin_47235839的博客 1169

Halcon那些事:Halcon非常核心的1个概念reduce_domain算子的理解和1个详细的使用示例

Reduce是减少的意思。并不是真的去裁剪图像,而是定义一个“感兴趣的区域(Region of Interest, ROI)”。后续的图像处理算子将只在这个定义的区域内有效,区域外的像素将被忽略。在一张白纸(完整图像)上放一张镂空的纸板(Domain)。我们后续的绘画(图像处理操作)只会透过镂空的部分影响到下面的白纸。镂空纸板之外的部分保持不变,也不会被处理。关键步骤:使用ReduceDomain,将图像的域限制为ROI区域,图像在原来图像基础上存在图像区域。

十多年IT经验,专注机器视觉,智能制造半导体行业 579

Java函数式接口的一个疑惑:为什么Comparator接口有两个抽象方法compare和equals,Comparator还是一个函数式接口?(@FunctionalInterface)

Java函数式接口的一个疑惑:为什么Comparator接口有两个抽象方法compare和equals,Comparator还是一个函数式接口?(@FunctionalInterface)

H_X_P_的博客 5892

使用 MATLAB/Simulink 搭建一个 无人机群间数据交换与协同控制仿真系统

本文提供了一份详细的Simulink无人机群协同控制仿真教程。主要内容包括:无人机群系统架构设计(去中心化网络、通信分层)、三维运动建模、空-空通信链路实现(距离判断、无线信道)、分布式Consensus控制算法开发,以及性能评估指标设定。教程采用模块化设计思路,通过ModelReference构建多无人机并行模型,并给出了MATLAB函数实现关键算法。最后展示了预期仿真结果(收敛时间<15s、位置偏差<2m)和进阶应用方向(编队飞行、AI协同等),帮助读者掌握群体智能系统的建模与仿真方法。

amy_mhd的博客 156

Google Earth Engine——使用STARFM 图像融合算法将Landsat 和 MODIS 融合得出2000-2023 NDVI长时序图(空间分辨率为 30 米、时间分辨率为 16 天)

非本地入侵物种是全球生态系统面临的主要威胁之一。野葛(Pueraria montana)是一种生长迅速的藤本植物,原产于亚洲,现已入侵美国一些地区,因此该物种的管理成为一个重要问题。利用 Landsat 和 MODIS 平台收集的数据,计算了 2000 年至 2015 年肯塔基州三个侵扰地点的归一化差异植被指数(NDVI)估算值。使用 STARFM 图像融合算法将大地遥感卫星和 MODIS 得出的 NDVI 结合成空间分辨率为 30 米、时间分辨率为 16 天的时间序列。

此星光明博客 2509

Lambda表达式

Lambda是Java 8 添加的一个新的特性,Lambda表达式就是一个匿名函数,也可以理解为一个匿名方法。 作用是实现了函数式接口(只含有一个抽象方法的接口),即Lambda表达式本身是对接口里的抽象方法进行重写,表达式中的参数和返回值根据抽象方法来决定,最终整个Lambda表达式就是该接口的实现对象。

qq_40078490的博客 666

EEMD算法原理及应用

本博客主要概括EEMD算法的背景、原理以及应用,利用EEEMD对信号进行分解,然后选择有用的IMF分量进行叠加以完成信号的重构,从而实现对信号降噪。本文配套的源代码见文中链接,可供大家免费下载。

总结论文中的算法并给出论文的复现代码 4万+

带你认识一下什么是函数式接口Comparator

函数式接口Comparator1、函数式接口是什么?所谓的函数式接口,实际上就是接口里面只能有一个抽象方法的接口。Comparator接口就是一个典型的函数式接口,它只有一个抽象方法compare。有人会说equales方法也没有方法体,也是抽象方法。但是函数式接口的特点中有一条是:允许出现java.lang.Object中的public方法,所以equales方法可以忽略掉,Comparator仍然是函数式接口。

weixin_54828627的博客 698

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

lambda表达式——函数式接口Comparator

lambda表达式——函数式接口Comparator一、函数式接口是什么?二、函数式接口的特点三、default关键字四、JDK中的函数式接口举例五、自定义Comparator排序 一、函数式接口是什么? 所谓的函数式接口,实际上就是接口里面只能有一个抽象方法的接口。我们上一节用到的Comparator接口就是一个典型的函数式接口,它只有一个抽象方法compare。 只有一个抽象方法?那上图中的equals方法不是也没有函数体么?不急,和我一起往下看! 二、函数式接口的特点 接口有且仅有一个抽象方法,如

weixin_40277684的博客 1800

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

关于Comparator是函数式接口

关于Comparator是函数式接口 public interface Comparator<T> { int compare(T o1, T o2); boolean equals(Object obj); default Comparator<T> reversed() { return Collections.reverseOrder(this); } default Comparator<T> thenCo

没有感情的低熵体的博客 794

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Comparator接口为什么有compare和equals两个抽象方法,但它还是一个函数式接口?

函数式接口是指仅包含一个抽象方法的接口(可以包含多个默认方法或静态方法)。Java 8通过注解来显式标识一个接口是函数式接口。// 可以有默认方法// 输出 "HELLO"

m0_56426418的博客 821

关于Comparator接口为什么是函数式接口

因为用到了comparingInt()这个方法,但翻看源码发现了Comparator是函数式接口,就看下面的抽象方法是谁,结果看到equals和compare两个方法,让我产生了疑惑。经过搜寻,找到原来函数式接口所说的一个抽象方法,已经被实现的方法并不会记录到这个方法中,或者重写父类、Object类中任意一个并不算做函数式接口中要求的抽象方法。如下代码,B还是函数式接口。

weixin_61871678的博客 274

Lambda表达式九:补充二:Stream接口的sorted()方法,Comparator函数式接口效果展示;Comparator函数式接口;函数式接口严格规范;

本篇博客没什么,主要就是加深下对Comparator接口的了解。 然后,主要是解决【Lambda表达式九:Stream流三:Stream常用方法;】这篇文章中的一个补充。 目录 1.Stream接口的sorted()方法,Comparator函数式接口效果展示; 2.Comparetor函数式接口的简述(本部分转载自8.函数式接口Comparator) 1.Stream接口的sorted()方法,Comparator函数式接口效果展示; Comparator接口中的核心方法,compare方法源

小枯林的博客 606

函数式接口 下的Comparable vs Comparator

Java中的Comparator和Comparable都符合函数式接口规范,但使用场景不同。Comparator是典型函数式接口,支持Lambda和方法引用,适用于外部灵活定义多种排序规则(如Arrays.sort(strs,(s1,s2)->s1.length()-s2.length()))。Comparable则是类内部实现的自然排序,虽符合函数式规范但灵活性差(需类实现compareTo方法)。

m0_74004373的博客 265

java中sort函数comparator的使用_8.函数式接口Comparator

## 一、函数式接口是什么?所谓的函数式接口,实际上就是接口里面**只能有一个抽象方法的接口**。我们上一节用到的Comparator接口就是一个典型的函数式接口,它只有一个抽象方法compare。![](https://img.kancloud.cn/25/5a/255a09bf972908b2366e7e93e88eefcb_1131x506.png)只有一个抽象方法?那上图中的equals方...

weixin_39683144的博客 561

关于函数式接口Comparator的疑惑

函数式接口中可以额外定义多个抽象方法,但这些抽象方法签名必须和Object的public方法一样 接口最终有确定的类实现, 而类的最终父类是Object。 因此函数式接口可以定义Object的public方法。 If an interface declares an abstract method overriding one of the public methods of java.lang....

qwerdfnd的博客 1228

为什么Comparator接口有两个抽象方法compare和equals,Comparator还是一个函数式接口?

Java函数式接口的一个疑惑:为什么Comparator接口有两个抽象方法compare和equals,Comparator还是一个函数式接口?(@FunctionalInterface) 转自@H_X_P

qq_27637285的博客 1761

为什么函数式接口 Comparator 中有 “两个抽象方法”?

为什么函数式接口 Comparator 中有 “两个抽象方法”?

weixin_56915683的博客 1121

函数式接口的实现方法之三:构造器引用 && 使用Comparator对数组排序

一、构造器引用 和方法引用类似,只不过方法名为new,如Interval::new就是Interval的构造器引用。 也可以用数组类型的构造引用,如int[]::new,它等价于 x->new int[x],一个参数指定数组大小。 构造引用可以为构造泛型数组提供方便,Java规定无法构造类型为T的数组,因为表达式new T[n]会被翻译成new Object[n]。例如,List<T>的toArray()方法只能返回Object数组,使...

padisah的博客 426

函数式接口【public interface Comparator<T>】接口用法

Java中的函数式接口概念,如@FunctionalInterface注解,解释了它意味着只有一个抽象方法的接口。Lambda表达式与函数式接口结合,简化了代码,便于函数式编程和并行计算。举例展示了如何使用Comparator接口对数组进行多条件排序。然而,这种方式可能降低代码可读性和在某些场景下的性能。

weixin_38148171的博客 425
上一篇: 一种通用的二分法写法
下一篇: 后端架构的演进
皮皮蟹01
博客等级 码龄10年 29粉丝 76原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值