订购键值对

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任何其他图书馆处理?

Man*_*dis 5

你说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所以你可以将它作为参数传递给比较.