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

时间:2009-11-03 18:31:43

标签: java functional-programming

我有一个List<Foo>和一个compare()方法,它接受两个Foo对象并返回'更大'对象。是否有一个内置的Java方法来获取列表并找到最大的一个?

7 个答案:

答案 0 :(得分:27)

如果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;
    }
});

答案 1 :(得分:8)

是的,List是Collection的子类,因此您可以使用max method

答案 2 :(得分:3)

尝试java.util.Collections.max

答案 3 :(得分:3)

答案 4 :(得分:2)

假设Foo不是内部类,并且compare()方法存在于名为CompareClass的类中

您可以执行以下操作:

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

根据您的比较方法,将fooList和方法compare作为Collections.max()的输入,并返回具有最大值的Foo对象。

答案 5 :(得分:0)

看看Google Collections - 他们有很多方法可以帮助您使用Predicates来做这类事情。

答案 6 :(得分:0)

同时查看lambdaj。有很多功能可以在功能样式中操作集合。