首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在java 8中,如何根据方法的最大结果来获取对象

在java 8中,如何根据方法的最大结果来获取对象
EN

Stack Overflow用户
提问于 2018-06-04 17:03:46
回答 2查看 85关注 0票数 2

我想用java8的lambda表达式重写下面的for-loop-语句。

代码语言:javascript
复制
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表达式是如何实现的呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-04 17:06:22

您可以Stream您的ObjectTest元素,将它们映射到一个IntStream,并调用max()方法来计算最大值:

代码语言:javascript
复制
int max = lst.stream()
             .mapToInt(obj->operation(obj.getA(), obj.getB()))
             .max()
             .orElse(0); // default value in case the input List is empty

编辑:如果您希望在编辑后找到最大值为operation(obj.getA(), obj.getB())ObjectTest实例,则可以使用Streammax(Comparator<? super T> comparator)

代码语言:javascript
复制
ObjectTest max = lst.stream()
                    .max(Comparator.comparingInt(obj->operation(obj.getA(), obj.getB())))
                    .orElse(null);
票数 7
EN

Stack Overflow用户

发布于 2018-10-13 03:14:49

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

代码语言:javascript
复制
public int operation(ObjectTest o) {
    return o.getA() * o.getB();
}   

然后你可以简单地写下:

代码语言:javascript
复制
import static java.util.Comparator.comparing;
import static java.util.stream.Collectors.maxBy;

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

获取操作产生最大结果的对象,以及

代码语言:javascript
复制
list.stream().maToInt(comparing(Test::operation)).max().orElse(0);

以获得最大的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50676927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档