由于java 8中方法的最大结果,如何获取Object

时间:2018-06-04 09:03:46

标签: java java-8

我想通过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;
        }
     }
}

lambda表达式怎么可能?

2 个答案:

答案 0 :(得分:7)

您可以Stream ObjectTest个元素,将它们映射到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

编辑:如果您希望在修改后找到ObjectTest最大值为operation(obj.getA(), obj.getB())的实例,则可以使用Stream&#39; s {{1} }:

max(Comparator<? super T> comparator)

答案 1 :(得分:0)

@Eran的答案是最简洁的,但是您应该考虑编写一个重载方法:

public int operation(ObjectTest o) {
    return o.getA() * o.getB();
}   

然后您可以简单地写:

import static java.util.Comparator.comparing;
import static java.util.stream.Collectors.maxBy;

list.stream().max(comparing(Test::operation)).orElse(null);

获取对其操作产生最大结果的对象,并且

list.stream().maToInt(comparing(Test::operation)).max().orElse(0);

以获得最大结果。