Muk*_*lan 5 java collections guava
我有以下两个类:
class KeyClass {
private prop1;
private prop2;
hashcode() {
//implemented properly
}
equals() {
//implemented properly
}
}
class ValueClass {
private prop1;
private prop2;
hashcode() {
//implemented properly
}
equals() {
//implemented properly
}
}
Run Code Online (Sandbox Code Playgroud)
我试图从地图中找出最大对,其中这些类的对象分别是键和值对.我也有一个com.google.common.collect.Ordering<ValueClass>使用多个比较器.我可以使用这个排序轻松找出最大值,但我感兴趣的是最大值的关键.
我可以编写一个特定的实现,其中我可以跟踪循环中的值并使用排序来比较值(类似于查找最大值的传统方式),但我想知道我们是否已经有这样的情况由Guava任何其他图书馆处理?
你说guava或任何其他库,这对Java 8流来说很简单.如果您的Ordering<ValueClass>实例被调用ordering:
Entry<KeyClass, ValueClass> maxEntry = map.entrySet().stream()
.max(Comparator.comparing(Entry::getValue, ordering))
.orElse(null);
Run Code Online (Sandbox Code Playgroud)
.map(Entry::getKey)之前添加orElse以获得密钥.
以上是可能的,因为番石榴的Ordering实现,java.util.Comparator所以你可以将它作为参数传递给比较.