Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.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
java8中的并行排序返回无效结果_Java_Parallel Processing_Java 8_Java Stream - Fatal编程技术网

java8中的并行排序返回无效结果

java8中的并行排序返回无效结果,java,parallel-processing,java-8,java-stream,Java,Parallel Processing,Java 8,Java Stream,在Java 8中使用streams应用并行排序时,得到的结果无效: List<String> list = new ArrayList<>(); list.add("A"); list.add("C"); list.add("B"); list.stream().sorted().forEach(System.out::println); System.out.println("-"); list.stream().parallel().sorted().forEa

在Java 8中使用streams应用并行排序时,得到的结果无效:

List<String> list = new ArrayList<>();
list.add("A");
list.add("C");
list.add("B");

list.stream().sorted().forEach(System.out::println);

System.out.println("-");

list.stream().parallel().sorted().forEach(System.out::println);
List List=new ArrayList();
列表。添加(“A”);
列表。添加(“C”);
列表。添加(“B”);
list.stream().sorted().forEach(System.out::println);
System.out.println(“-”);
list.stream().parallel().sorted().forEach(System.out::println);
结果:

A
B
C
-
B  <----- Invalid order
C
A
A
B
C
-
B不保证按特定顺序处理元素:

此操作的行为显然是不确定的。对于并行流管道,此操作不能保证尊重流的相遇顺序,因为这样做会牺牲并行性的好处。对于任何给定的元素,可以在库选择的任何时间和线程中执行该操作。如果操作访问共享状态,则它负责提供所需的同步

您应该改用
forEachOrdered()

list.stream().parallel().sorted(Comparator.comparing(e -> e.getFirstName()))
    .forEachOrdered(System.out::println);

为了避免混淆,请使用相同的代码创建comparator,因此可以使用
comparator代替Lambda。在两个
排序的
操作中比较(Employee::getFirstName)
。或者,将排序结果捕获到集合或数组中,然后对其进行操作:list.stream().sorted(…).toArray();