Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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_String - Fatal编程技术网

在java映射中对映射元素进行排序<;字符串,列表<;字符串>&燃气轮机;倒序

在java映射中对映射元素进行排序<;字符串,列表<;字符串>&燃气轮机;倒序,java,string,Java,String,在我的java程序中,我得到的结果如下 输出: 英亩护理赛跑 扮演猫 预期: 扮演猫 英亩护理赛跑 现在我想按相反的顺序对地图元素进行排序。所以我可以得到上面的结果。我在下面添加了我的代码 public static void main(String args[]) { try { Scanner sc = readWords(); Map<String, List<String>> wordAnagramPairs = new

在我的java程序中,我得到的结果如下

输出:

英亩护理赛跑

扮演猫

预期:

扮演猫

英亩护理赛跑

现在我想按相反的顺序对地图元素进行排序。所以我可以得到上面的结果。我在下面添加了我的代码

public static void main(String args[]) {

    try {
        Scanner sc = readWords();
        Map<String, List<String>> wordAnagramPairs = new HashMap<>();
        wordAnagramPairs = mapAnagrams(sc);
        Comparator<List<String>> c = (l1, l2) -> {
            Collections.sort(l1);
            Collections.sort(l2);
            int in = l1.get(0).length() - l2.get(0).length();
            if (in == 0) {
                return String.join(" ", l1).compareTo(String.join(" ", l2));
            } else {
                return in;
            }
        };
        List<List<String>> sortedList = wordAnagramPairs.values()
                .stream()
                .filter(li -> li != null && li.size() > 1)
                .sorted(c)
                .collect(Collectors.toList());

        for(List<String> anagrams : sortedList){
            for(String anagram : anagrams){
                System.out.print(anagram + " ");
            }
            System.out.print('\n');
        }

    } catch (FileNotFoundException e) {
        System.out.println("File Not Found");
    }
}
publicstaticvoidmain(字符串参数[]){
试一试{
Scanner sc=readWords();
Map wordAnagramPairs=newhashmap();
wordAnagramPairs=地图图(sc);
比较器c=(l1,l2)->{
集合。排序(l1);
集合。排序(l2);
int in=l1.get(0.length()-l2.get(0.length();
如果(in==0){
返回String.join(“,l1).compareTo(String.join(“,l2));
}否则{
返回;
}
};
List sortedList=wordAnagramPairs.values()
.stream()
.filter(li->li!=null&&li.size()>1)
.已分类(c)
.collect(Collectors.toList());
用于(列表字谜:sortedList){
for(字符串字谜:字谜){
系统输出打印(字谜+“”);
}
系统输出打印('\n');
}
}catch(filenotfounde异常){
System.out.println(“未找到文件”);
}
}

通过查看预期输出,似乎需要按列表元素的长度排序,如果长度相等,则需要按排序后的列表元素排序

按元素长度进行比较,然后列出元素

Comparator<List<String>> c = (l1, l2) -> {
            Collections.sort(l1); // elements to be sorted
            Collections.sort(l2); // elements to be sorted
            int in = l1.get(0).length() - l2.get(0).length();
            if (in == 0) {
                return String.join(" ", l1).compareTo(String.join(" ", l2));
            } else {
                return in;
            }
        };
收集已排序的结果

    List<List<String>> sortedList = wordAnagramPairs.values().stream().filter(li -> li != null && li.size() > 1).sorted(c)
            .collect(Collectors.toList());

    System.out.println(sortedList);

您可以在不使用HashMap的情况下使用TreeMap。 请参阅:

除非像这样尝试:

要对地图进行排序,请执行以下操作:

Map<String, List<String>> sortedMap = new TreeMap<String, List<String>>(Collections.reverseOrder());
sortedMap .putAll(wordAnagramPairs );


使用
TreeMap
而不是
HashMap
我尝试了这两种解决方案,但仍然不起作用。这是同样的结果。你试过第一个比较器了吗?查看输出,它与您的预期输出匹配。在问题中添加所有输入,同时提及哪一个不工作,我尝试的比较器似乎工作正常。但是如果我删除
.forEach(System.out::println)结果更改。你能告诉我为什么会这样吗?
forEach
是一个终端操作,我们需要的工作流应该有终端操作符。添加了一个
collect
来收集已排序的列表。用collect检查更新的答案
    List<List<String>> sortedList = wordAnagramPairs.values().stream().filter(li -> li != null && li.size() > 1).sorted(c)
            .collect(Collectors.toList());

    System.out.println(sortedList);
    wordAnagramPairs.entrySet()
                    .stream()
                    .filter(e -> e.getValue().size() > 1)
                    .sorted(Map.Entry.comparingByKey())
                    .forEach(System.out::println);
Map<String, List<String>> sortedMap = new TreeMap<String, List<String>>(Collections.reverseOrder());
sortedMap .putAll(wordAnagramPairs );
Collections.sort(list, Collections.reverseOrder());
Collections.reverse(list);