使用预定义的比较器在java中查找最大值

dohp0rv5  于 2021-06-30  发布在  Java
关注(0)|答案(7)|浏览(299)

我有一个 List<Foo> ,以及一个compare()方法,获取两个foo对象并返回“greater”对象。是否有一个内置的java方法来获取列表并找到最大的一个?

u0sqgete

u0sqgete1#

假设 Foo 不是一个内部类 compare() 方法存在于名为 CompareClass 您可以执行以下操作:

Collections.max(fooList, CompareClass::compare);

因此 fooList 方法呢 compare 作为输入 Collections.max() 并返回 Foo 对象的最大值-根据您的比较方法。

qxgroojn

qxgroojn2#

是的,列表是collection的一个子类,因此可以使用max方法。

ojsjcaue

ojsjcaue3#

看看googlecollections——它们有很多方法可以帮助您使用 predicate 来完成这类工作。

zujrkrfu

zujrkrfu4#

如果 Foo 工具 Comparable<Foo> ,那么 Collections.max(Collection) 就是你要找的。
如果没有,可以创建 Comparator<Foo> 使用 Collections.max(Collection, Comparator) 相反。

示例

// Assuming that Foo implements Comparable<Foo>
List<Foo> fooList = ...;
Foo maximum = Collections.max(fooList);
// Normally Foos are compared by the size of their baz, but now we want to
// find the Foo with the largest gimblefleck.
Foo maxGimble = Collections.max(fooList, new Comparator<Foo>() {
    @Override
    public int compare(Foo first, Foo second) {
        if (first.getGimblefleck() > second.getGimblefleck())
            return 1;
        else if (first.getGimblefleck() < second.getGimblefleck())
            return -1;
        return 0;
    }
});
laik7k3q

laik7k3q5#

尝试 java.util.Collections.max

iklwldmw

iklwldmw6#

看看兰姆达吉。在函数样式中有许多特性可以操作集合。

qybjjes1

qybjjes17#

使用 Collections#max(Collection) .

相关问题