我试图排序并获得前3名最大信号值的值(?)排序散列maps地图<String,?>
Map<String,?> points = map
使用Map<String, String>
尝试,它工作正常,但在这种情况下,我需要Map<String, ?>
。
我试图排序并获得前3名最大信号值的值(?)排序散列maps地图<String,?>
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
到集合来选择如何订购物品。
我得到这个错误: 绑定不匹配:类型ScorePage的泛型方法sortValues(地图,T>)不适用于参数(Map <捕获#3的?,捕获#4??>)。推断的类型捕获#4 - ?不是有限参数的有效替代
错误是告诉你,你的值的声明类型('capture#4-of?')没有实现“Comparable”。除非您创建一个定义您想要如何比较对象的“Comparator”,否则不可能对不可比较的对象进行排序。请注意,每个'?'定义了一个单独的类型,因此消息中的“捕获#x”。 – dsh 2013-03-17 18:29:40
您无法对非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
返回值,如在其采摘前三个对象。
我希望你是存储字符串作为键和映射作为价值排序的地图,即treeMap大概。那么问题是什么。前3个值是你正在查找的那个 – 2013-03-17 02:11:47
它获得的地图是未排序的,它的实际和随机NAME的XML文件,?值 – user1601401 2013-03-17 02:13:03
您应该使用treemap而不是hashmap – 2013-03-17 02:14:24