java - 为什么要输出映射键,你需要在 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>comparingByValue().reversed().thenComparing(Map.Entry.<String, Integer>comparingByKey()))).limit(10).map(Map.Entry::getKey).forEach(System.out::println);
然后它给出了想要的结果
也就是这样一段文字:
Lorem ipsum dolor sit amet, consectetur adipiscing elit。在 faucibus 的 Sed sodales consectetur purus。Donec mi quam, tempor vel ipsum non, faucibus suscipit massa。Morbi lacinia velit blandit tincidunt efficitur。前庭 eget metus imperdiet sapien laoreet faucibus。Nunc eget vehicula mauris, ac autor lorem。Lorem ipsum dolor sit amet, consectetur adipiscing elit。Integer vel odio nec mi tempor dignissim。
adipiscing tempor blandit efficitur lacinia laoreet massa odio suscipit 前庭
给出以下(不正确的)结果,但替换给出了正确的结果
consectetur faucibus ipsum lorem adipiscing amet dolor eget elit mi
我希望我正确地提出了这个问题,我很乐意提供帮助!
解决方案
推荐阅读
- javascript - Mutation Observer 观察其子元素发生变化的父 DOM 元素
- ios - 如何在我的 Swift 应用程序中向多个单一联系人发送短信?
- flutter - 如何在 Flutter Web 中使用 lib assets_audio_player
- flutter - 每 50 毫秒 Flutter 任务
- session - NextJs 受 Next Auth 保护的 API
- python - Python Django:为什么 Google OAuth2 令牌在过期时间后有效?
- java - 动态模板(Sendgrid APIs)中嵌入的内嵌图像
- sql - 在oracle sql中将列值拆分为多个列
- bash - 为什么我不能在 bash 脚本中使用 `source` ssh-agent 和 ssh-add?
- imap - IMAP:如何确定允许的最大文件夹名称和路径长度?