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

在Java中使用Lambda表达式查找Max

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

在Java中使用Lambda表达式查找Max

该方法

Comparator.comparing(…)
旨在创建一个
Comparator
使用基于对象属性的订单进行比较的。当使用lambda表达式
i-> i
(这是
(int i) -> { return i;}
此处的简短写法)作为属性提供程序函数时,结果
Comparator
将比较值本身。这工作时,要比较的对象有一个 自然秩序
Integer
了。

所以

Stream.of(1,2,4,3,5).max(Comparator.comparing(i -> i)).ifPresent(maxInt->System.out.println("Maximum number in the set is " + maxInt));

与…相同

Stream.of(1,2,4,3,5).max(Comparator.naturalOrder()).ifPresent(maxInt->System.out.println("Maximum number in the set is " + maxInt));

尽管后者更有效,因为它对于具有自然顺序的所有类型都实现为单例(和实现

Comparable
)。

根本

max
不需要a 的原因
Comparator
是因为您使用的泛型类
Stream
可能包含任意对象。

这允许(例如)使用它

streamOfPoints.max(Comparator.comparing(p->p.x))
来查找具有最大值的点,
x
Point
其本身没有自然顺序。或者做类似的事情
streamOfPersons.sorted(Comparator.comparing(Person::getAge))

使用专家时,

IntStream
您可以直接使用自然顺序,这可能会更有效:

IntStream.of(1,2,4,3,5).max().ifPresent(maxInt->System.out.println("Maximum number in the set is " + maxInt));

为了说明“自然顺序”与基于属性的顺序之间的区别:

Stream.of("a","bb","aaa","z","b").max(Comparator.naturalOrder()).ifPresent(max->System.out.println("Maximum string in the set is " + max));

这将打印

集合中的最大字符串为z

因为

String
s 的自然顺序是字典顺序,其中
z
大于
b
大于大于
a

另一方面

Stream.of("a","bb","aaa","z","b").max(Comparator.comparing(s->s.length())).ifPresent(max->System.out.println("Maximum string in the set is " + max));

将打印

集合中的最大字符串为aaa

如流中所有s

aaa
的最大
长度
String
。这是一个预期的用例,
Comparator.comparing
使用方法引用时可以使其更具可读性,即
Comparator.comparing(String::length)
几乎可以说明一切……



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

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

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