Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对地图进行排序的比较器_Java_Dictionary_Comparator - Fatal编程技术网

Java 对地图进行排序的比较器

Java 对地图进行排序的比较器,java,dictionary,comparator,Java,Dictionary,Comparator,希望你做得很好。我在实现comparator方法时遇到了一些问题,无法按照地图的值对地图进行排序。我已经编写了comparator方法,现在正在尝试编写一个方法,该方法将未排序的映射作为输入,并使用comparator实现返回排序的映射。但是,我的代码中的一行中有一个错误,导致它无法编译。下面给出了我编写的排序方法的代码: public static HashMap<String,ArrayList<String>>strongSorter(HashMap<Stri

希望你做得很好。我在实现comparator方法时遇到了一些问题,无法按照地图的值对地图进行排序。我已经编写了comparator方法,现在正在尝试编写一个方法,该方法将未排序的映射作为输入,并使用comparator实现返回排序的
映射。但是,我的代码中的一行中有一个错误,导致它无法编译。下面给出了我编写的排序方法的代码:

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());
}

您可以使用树映射作为排序映射,并指定比较器。

排序。。。哈希映射?