Java 对地图进行排序的比较器
希望你做得很好。我在实现comparator方法时遇到了一些问题,无法按照地图的值对地图进行排序。我已经编写了comparator方法,现在正在尝试编写一个方法,该方法将未排序的映射作为输入,并使用comparator实现返回排序的Java 对地图进行排序的比较器,java,dictionary,comparator,Java,Dictionary,Comparator,希望你做得很好。我在实现comparator方法时遇到了一些问题,无法按照地图的值对地图进行排序。我已经编写了comparator方法,现在正在尝试编写一个方法,该方法将未排序的映射作为输入,并使用comparator实现返回排序的映射。但是,我的代码中的一行中有一个错误,导致它无法编译。下面给出了我编写的排序方法的代码: public static HashMap<String,ArrayList<String>>strongSorter(HashMap<Stri
映射。但是,我的代码中的一行中有一个错误,导致它无法编译。下面给出了我编写的排序方法的代码:
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;
}
publicstatichashmapsstrongsorter(HashMap unsortedMap){
MapComparator myCompare=新的MapComparator(未分类地图);
HashMap sortedMap=新的HashMap(myCompare);
分类地图putAll(未分类地图);
返回分拣的DMAP;
}
错误出现在我尝试创建sortedMap的行中;Eclipse声明不允许我将myCompare作为参数传递,因为我输入的参数必须与HashMap
的输入相匹配。我不知道该如何解决这个问题,非常感谢您的帮助
谢谢 您不能拥有已排序的HashMap
。从Javadoc(我的重点):
基于哈希表的映射接口实现。这
实现提供了所有可选的映射操作,以及
允许空值和空键。(HashMap类大致如下所示
与哈希表等效,只是它不同步且允许
nulls。)该类不保证映射的顺序;
特别是,它不能保证订单将保持不变
随时间变化的常数。
如果要在地图中排序,应使用,例如。另外,请注意,TreepMap
按键排序,因此您可能不得不这样做
您可以在Java8中使用中的comparingByValue()
方法来实现这一点。下面是一个示例,返回按映射值排序的流
:
public static Stream<Map.Entry<String, List<String>>> strongSorter(Map<String, List<String>> unsortedMap) {
return unsortedMap.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue(new MapComparator()));
}
公共静态流strong分拣机(地图未分拣地图){
返回unsortedMap.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue(新的MapComparator());
}
您可以使用树映射作为排序映射,并指定比较器。排序。。。哈希映射?