0

我正在尝试排序并获取 VALUE 的前 3 个最大值(?)

Map<String,?> points = map

尝试使用Map<String, String>,它工作正常,但在这种情况下,我需要Map<String, ?>.

4

2 回答 2

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的集合来选择如何订购对象。

于 2013-03-17T02:44:30.400 回答
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,比如选择其中的前三个对象。

于 2013-03-17T02:49:15.567 回答