2013-03-17 68 views
0

我试图排序并获得前3名最大信号值的值(?)排序散列maps地图<String,?>

Map<String,?> points = map 

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

+0

我希望你是存储字符串作为键和映射作为价值排序的地图,即treeMap大概。那么问题是什么。前3个值是你正在查找的那个 – 2013-03-17 02:11:47

+0

它获得的地图是未排序的,它的实际和随机NAME的XML文件,?值 – user1601401 2013-03-17 02:13:03

+0

您应该使用treemap而不是hashmap – 2013-03-17 02:14:24

回答

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到集合来选择如何订购物品。

+0

我得到这个错误: 绑定不匹配:类型ScorePage的泛型方法sortValues(地图)不适用于参数(Map <捕获#3的?,捕获#4??>)。推断的类型捕获#4 - ?不是有限参数的有效替代 \t ScorePage.java – user1601401 2013-03-17 17:00:47

+0

错误是告诉你,你的值的声明类型('capture#4-of?')没有实现“Comparable”。除非您创建一个定义您想要如何比较对象的“Comparator”,否则不可能对不可比较的对象进行排序。请注意,每个'?'定义了一个单独的类型,因此消息中的“捕获#x”。 – dsh 2013-03-17 18:29:40

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返回值,如在其采摘前三个对象。

相关问题