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

rez*_*tin 2 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;
        }
     }
}
Run Code Online (Sandbox Code Playgroud)

lambda表达式怎么可能?

Era*_*ran 7

您可以StreamObjectTest元素映射到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)

  • 添加一些换行符/空格可能会使这更容易阅读.+1 (4认同)