【发布时间】:2018-10-17 18:24:46
【问题描述】:
我有以下代码
final String arr[] = {"A", "B", "C", "D"};
final List<String> list1 = new ArrayList<>();
final List<String> list2 = Arrays.asList(arr).parallelStream()
.peek(s -> list1.add(s + s))
.map(s -> s + s)
.collect(Collectors.toList());
System.out.println(list1);
System.out.println(list2);
我得到以下结果:
[null, AA, DD, null]
[AA, BB, CC, DD]
为什么某些元素在list1 中显示null?
我知道我应该使用SynchronizedList 和parallelStream,但null 的值让我感到惊讶。
一旦您向列表中添加了某些内容,就应该设置该插槽,并且下一次执行应该为其添加另一个值。
【问题讨论】:
-
我无法复制。你用的是哪个java版本?
-
@Eran 这将很难重现,也不是来自单个调用......无论如何它是非常不确定的
-
@Eugene 我尝试了多次。有时我在
list1列表中有 3 个元素,有时是 4 个,但我从来没有得到null元素。 -
我运行了你的程序并没有得到任何空值,但有时会得到 3 个元素
-
@fastcodejava 谢谢我看到了答案,我还没有运行 Eugene 的代码,但是又运行了很多次你的代码并且确实看到了一次空值。没有什么特别的配置,使用的是 Java 8
标签: java parallel-processing java-stream