为什么要输出映射键,在 forEach 之前需要 map (Map.Entry::getKey) ,而 forEach 内部的 getKey() 没有给出相同的结果?

问题描述

我编写了一个程序,它会从流中获取文本并对其进行排序,然后在屏幕上显示另外 10 个单词,结果是这样的:

public class Main {
    public static void main(String[] args) throws IOException {

        Map<String,Integer> map = new HashMap<>();
        Scanner scan = new Scanner(system.in,StandardCharsets.UTF_8).useDelimiter("[^\\p{LD}]+");
        scan.forEachRemaining(word -> map.merge(word.toLowerCase(),1,Integer::sum));

        map.entrySet().stream().limit(10).sorted((Map.Entry.<String,Integer>comparingByValue().reversed().thenComparing(Map.Entry.<String,Integer>comparingByKey()))).forEachOrdered(key->System.out.println(key.getKey()));

    }

}

但是在执行的时候,它给出了错误的结果,但是如果你把它改成重写.map(Map.Entry::getKey).forEach(System.out::println)

map.entrySet().stream().sorted((Map.Entry.<String,Integer>comparingByKey()))).limit(10).map(Map.Entry::getKey).forEach(System.out::println);

然后它给出了想要的结果

就是这样一段文字

Lorem ipsum dolor 坐 amet,consectetur adipiscing 精英。 Sed soDales consectetur purus at faucibus。 Donec mi quam,tempor vel ipsum non,faucibus suscipit massa。 Morbi lacinia velit blandit tincidunt efficitur。前庭 imperdiet sapien laoreet faucibus。 Nunc eget vehicula mauris,ac auctor lorem。 Lorem ipsum dolor 坐 amet,consectetur 吸脂精英。整数 vel odio nec mi tempor dignissim。

吸脂 时间 平淡无奇 效率 拉西尼亚 劳瑞特 马萨 欧迪奥 怀疑 前庭

给出以下(错误的)结果,但替换后给出正确的结果

consectetur 福西巴 ipsum 知识点 吸脂 阿米特 苦恼 得到 精英 米

我希望我的问题是正确的,我很乐意提供帮助!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)