我有一个List<Foo>
和一个compare()方法,它接受两个Foo对象并返回'更大'对象。是否有一个内置的Java方法来获取列表并找到最大的一个?
答案 0 :(得分:27)
如果Foo
实施Comparable<Foo>
,那么Collections.max(Collection)
就是你要找的。 p>
如果没有,您可以创建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。有很多功能可以在功能样式中操作集合。