对哈希映射进行排序映射<string,?> </string,?>

时间:2013-03-17 02:08:11

标签: java android hashmap

我正在尝试排序并获得VALUE(?)

的前3个最大值
Map<String,?> points = map

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

2 个答案:

答案 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的返回值执行任何操作,例如选择其中的前三个对象。