希望你做得好。我在实现比较器方法时遇到一些问题,无法通过其值对地图进行排序。我已经编写了比较器方法,现在我正在尝试编写一个方法,该方法将未排序的映射作为输入,并使用比较器实现来返回已排序的Map
。但是,我的代码中的一行中存在错误,导致无法编译。我写的排序方法的代码如下:
public static HashMap<String,ArrayList<String>>strongSorter(HashMap<String,ArrayList<String>> unsortedMap) {
MapComparator myCompare = new MapComparator(unsortedMap);
HashMap<String,ArrayList<String>> sortedMap = new HashMap<String,ArrayList<String>>(myCompare);
sortedMap.putAll(unsortedMap);
return sortedMap;
}
错误出现在我尝试创建sortedMap的行中; Eclipse声明我不允许将myCompare作为参数传递,因为我输入的参数必须与HashMap<String, ArrayList<String>>
的输入匹配。我不知道怎么解决这个问题,非常感谢任何帮助。
谢谢!
答案 0 :(得分:3)
您无法排序HashMap
。来自Javadoc(强调我的):
基于哈希表的Map接口实现。这个 实现提供了所有可选的map操作,以及 允许空值和空键。 (HashMap类大致是 相当于Hashtable,除了它是不同步的并允许 nulls。)此类不保证地图的顺序; 特别是,它不保证订单将保留 随着时间的推移不断。
如果您想在地图中订购,则应使用SortedMap
,例如TreeMap
。另请注意,TreepMap
按键排序,因此您可能需要try another approach to this。
您可以使用Map.Entry
中的comparingByValue()
方法在Java 8中执行此操作。下面是一个示例,它返回按地图值排序的Stream
:
public static Stream<Map.Entry<String, List<String>>> strongSorter(Map<String, List<String>> unsortedMap) {
return unsortedMap.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue(new MapComparator()));
}
答案 1 :(得分:0)
您可以将TreeMap用作有序地图并指定比较器。