使用 Java 8 流方法获取最后一个最大值
2022-09-03 14:01:43
给定具有属性的项列表,我正在尝试使最后一项以所述属性的最大值显示。
例如,对于以下对象列表:
t i
A: 3
D: 7 *
F: 4
C: 5
X: 7 *
M: 6
我可以得到一个最高的东西:i
Thing t = items.stream()
.max(Comparator.comparingLong(Thing::getI))
.orElse(null);
但是,这将得到我.有没有一种干净而优雅的方式来获得最后一项,即 在这种情况下?Thing t = D
X
一种可能的解决方案是使用该函数。但是,该属性是动态计算的,它看起来更像:reduce
Thing t = items.stream()
.reduce((left, right) -> {
long leftValue = valueFunction.apply(left);
long rightValue = valueFunction.apply(right);
return leftValue > rightValue ? left : right;
})
.orElse(null);
现在需要调用的频率几乎是其两倍。valueFunction
其他明显的环形交叉路口解决方案包括:
- 将对象及其索引存储在元组中
- 将对象存储在具有计算值的元组中
- 事先反转列表
- 不要使用流