栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java 8流的.min()和.max():为什么要编译他?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 8流的.min()和.max():为什么要编译他?

让我解释一下这里发生的事情,因为它并不明显!

首先,

Stream.max()
接受的一个实例,
Comparator
以便可以将流中的项目彼此进行比较,从而以不需要担心太多的最佳顺序来找到最小值或最大值。

因此,问题当然是为什么被

Integer::max
接受?毕竟它不是比较器!

答案是,新的lambda功能可以在Java 8中工作。它依赖于一个被非正式地称为“单一抽象方法”接口或“ SAM”接口的概念。这个想法是,具有一个抽象方法的任何接口都可以由任何lambda(或方法引用)自动实现,这些方法的方法签名与接口上一个方法的匹配。因此,检查Comparator界面(简单版本):

public Comparator<T> {    T compare(T o1, T o2);}

如果一个方法正在寻找

Comparator<Integer>
,那么它实际上是在寻找这个签名:

int xxx(Integer o1, Integer o2);

我使用“ xxx”,因为方法名称未用于匹配目的。

因此,两者

Integer.min(int a, int b)
Integer.max(int a, int b)
都足够接近,自动装箱将允许它
Comparator<Integer>
在方法上下文中显示为。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/456619.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号