我正在尝试排序并获得VALUE(?)
的前3个最大值Map<String,?> points = map
尝试使用Map<String, String>
并且工作正常,但在这种情况下我需要Map<String, ?>
。
答案 0 :(得分:0)
值的类型需要实现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
以选择如何订购对象。
答案 1 :(得分:0)
首先,您无法对非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
的返回值执行任何操作,例如选择其中的前三个对象。