下面的代码工作并产生一个字符串,该字符串是从1开始连接前100个unicode字符的结果。[我正在使用Java 1.8版本]
Stream<Character> chars = Stream.iterate('1', op -> (char)(op + 1));
StringBuilder value = chars.limit(100).reduce
(new StringBuilder(""), (s, c) -> s.append(c), (p,d) -> p.append(d) );
System.out.println(value.toString());
上面的输出是-
123456789:; <=> @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [] ^ _`ABCDEFGHIJKLMNOPQRSTUVWXYZ {|}〜?????????????????????
但是当我按如下所示将字符变成并行流时,我得到了IndexOutOfBoundsException-
Stream<Character> chars = Stream.iterate('1', op -> (char)(op + 1));
StringBuilder value = chars.parallel().limit(100).reduce
(new StringBuilder(""), (s, c) -> s.append(c), (p,d) -> p.append(d) );
System.out.println(value.toString());
我期望值字符串中字符的顺序会有所不同,因为这是并行流,但是如果顺序无关紧要,则该程序甚至可以用于并行流。但是我收到了IndexOutOfBoundsException。如果使流平行,为什么会出现IndexOutOfBoundsException。