sorted()之后的Distinct()是否给出不同的结果而不是使用独立流?

问题描述 投票:0回答:1

我在sorted()之后使用了distenict(),并且在列表流上相同都给出了差异结果

    List<String> list1 = Arrays.asList("aaaaa", "b", "lll", "kkk", "kkk");
    List<String> list2 = Arrays.asList("h", "kkk", "mmmm");

    List<String> list3 = Stream.concat(list1.stream(), list2.stream()).collect(Collectors.toList());
    System.out.println("=======================================");
    list3.stream().distinct().sorted(Comparator.comparing(String::length)).forEach(System.out::println);
    ; // System.out.println(g);
    System.out.println("=======================================");
    list3.stream().distinct().forEach(System.out::println);
java sorting java-8 java-stream distinct
1个回答
0
投票

我想你是在问为什么你第二次打电话

distinct()
排队

list3.stream().distinct().forEach(System.out::println);

打印出的结果与该行第一次的结果不同

list3.stream().distinct().sorted(Comparator.comparing(String::length)).forEach(System.out::println);

这是因为您正在处理列表中的元素流。首先,您只从该流中获取不同的结果,然后在打印之前对该流进行排序。

所有这些操作仅发生在上。他们不会修改流的后备列表。因此 List 中元素的顺序和内容保持不变。

因此,您的第二个不同的流发生在同一个原始未排序列表上。

© www.soinside.com 2019 - 2024. All rights reserved.