我实际上已经从这个例子中得到了这个工作:
static <K,V extends Comparable<? super V>>
List<Entry<K, V>> entriesSortedByValues(Map<K,V> map) {
List<Entry<K,V>> sortedEntries = new ArrayList<Entry<K,V>>(map.entrySet());
Collections.sort(sortedEntries,
new Comparator<Entry<K,V>>() {
@Override
public int compare(Entry<K,V> e1, Entry<K,V> e2) {
return e2.getValue().compareTo(e1.getValue());
}
}
);
return sortedEntries;
}
现在,我已经实现了这段代码并且它确实有效。我基本上了解正在发生的事情。我唯一不完全理解的代码部分是在方法头中,具体来说:
static <K,V extends Comparable<? super V>>
如果有人可以向我解释这部分代码,我将非常感激。具体来说为什么我应该在这种情况下使用 super 。
我对 Java 还很陌生,所以试图很好地理解如何使用不同的技术,而不是在没有真正理解发生了什么的情况下将它们扔到我的代码中。
注意:我本来会对原始答案发表评论,但只有当我的声誉超过 50 时我才能发表评论。我希望我这样发帖不会违反任何规则!
最佳答案
这一行使该方法变得通用。您可以在类 header 或方法声明中使用泛型类型。在本例中,为方法声明。
static <K,V extends Comparable<? super V>>
声明一个无界的泛型类型K
。这意味着它可以是 Object
类型的任何子类。然后它声明了第二种类型 V
,它必须实现 Comparable
接口(interface)。 Comparable
实现也是类型化的,并且该方法添加了一个绑定(bind),声明 Comparable 类应该能够与泛型类型 V
的父类(super class)型的任何内容进行比较。
额外阅读
关于java - 按降序对 map 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26981916/