有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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. Sed sodales consectetur purus at faucibus. Donec mi quam, tempor vel ipsum non, faucibus suscipit massa. Morbi lacinia velit blandit tincidunt efficitur. Vestibulum eget metus imperdiet sapien laoreet faucibus. Nunc eget vehicula mauris, ac auctor 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 vestibulum

给出以下(不正确)结果,但更换后给出正确结果

consectetur faucibus ipsum lorem adipiscing amet dolor eget elit mi

我希望我问的问题是正确的,我会很乐意帮忙的


共 (0) 个答案