我想通过java8的lambda表达式重写下面的for-loop语句.
public class Test {
List<ObjectTest> lst;
public int operation(int a, int b) {
return a * b;
}
int max = 0;
ObjectTest suitableObj = null;
for(ObjectTest obj:lst) {
int result = operation(obj.getA(), obj.getB());
if(result > max) {
suitableObj = obj;
max = result;
}
}
}
Run Code Online (Sandbox Code Playgroud)
lambda表达式怎么可能?
您可以Stream将ObjectTest元素映射到a IntStream并调用max()方法来计算最大值:
int max = lst.stream()
.mapToInt(obj->operation(obj.getA(), obj.getB()))
.max()
.orElse(0); // default value in case the input List is empty
Run Code Online (Sandbox Code Playgroud)
编辑:如果你想在编辑后找到ObjectTest最大值为的实例operation(obj.getA(), obj.getB()),你可以使用Stream's max(Comparator<? super T> comparator):
ObjectTest max = lst.stream()
.max(Comparator.comparingInt(obj->operation(obj.getA(), obj.getB())))
.orElse(null);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |