java最大值函数_Java Stream:找到具有属性的最小/最大值的元素

我有一个对象流,我想找到一个具有某种属性的最大值的计算的代价很高.

作为一个具体的简单示例,假设我们有一个字符串列表,我们想要找到最酷的字符串,给出一个coolnessIndex函数.

以下应该工作:

String coolestString = stringList

.stream()

.max((s1,s2) -> Integer.compare(coolnessIndex(s1),coolnessIndex(s2)))

.orElse(null);

现在有两个问题.首先,假设coolnessIndex是昂贵的计算,这可能不会很有效率.我想max方法将需要反复使用比较器,反过来会反复调用coolnessIndex,最后每个字符串将被调用多次.

第二,必须提供比较器会导致代码中的一些冗余.我更喜欢这样的语法:

String coolestString = stringList

.stream()

.maxByAttribute(s -> coolnessIndex(s))

.orElse(null);

但是,我未能在Stream API中找到匹配的方法.这让我感到惊讶,因为通过属性找到最小/最大值似乎是一个常见的模式.我想知道是否有比使用比较器更好的方法(而不是for循环).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值