我正在尝试排序并获取 VALUE 的前 3 个最大值(?)
Map<String,?> points = map
尝试使用Map<String, String>
,它工作正常,但在这种情况下,我需要Map<String, ?>
.
值的类型将需要实现Comparable
。
如果地图的大小不是太大,你可以尝试这样的事情:
private <T extends Comparable> SortedSet<T> sortValues(final Map<?, T> m)
{
final SortedSet<T> result = new TreeSet<>();
result.addAll(m.values());
return result;
}
我没有对此进行测试,但我认为我的所有类型声明都是正确的。然后只取排序集中的第一个或最后一个元素。我相信您可以选择提供自己Comparator
的集合来选择如何订购对象。
首先,您无法对非Comparable
对象进行排序,因此您需要一个带有Comparable
值的映射,而不是?
. 但是,有了它,您可以执行以下操作:
public static <T extends Comparable<? super T>> List<T> sortValues(Map<?, T> map) {
List<T> buffer = new ArrayList<T>(map.values());
Collections.sort(buffer);
return(buffer);
}
然后你可以用 的返回值做任何你想做的事情sortValues
,比如选择其中的前三个对象。