我目前正在开发一个使用 的程序Java.util.Collection.parallelStream(),并想知道是否可以使其更加多线程。
我想知道使用多个map是否可以Java.util.Collection.parallelStream()更好地分配任务:
List<InsertOneModel<Document>> bulkWrites = puzzles.parallelStream()
.map(gson::toJson)
.map(Document::parse)
.map(InsertOneModel::new)
.toList();
Run Code Online (Sandbox Code Playgroud)
例如,比以下更好的分布:
List<InsertOneModel<Document>> bulkWrites = puzzles.parallelStream()
.map(puzzle -> new InsertOneModel<>(Document.parse(gson.toJson(puzzle))))
.toList();
Run Code Online (Sandbox Code Playgroud)
是否有一种解决方案更适合Java.util.Collection.parallelStream(),或者两者没有太大区别?
有人可以告诉我为什么会发生这种情况,这是预期的行为还是错误
List<Integer> a = Arrays.asList(1,1,3,3);
a.parallelStream().filter(Objects::nonNull)
.filter(value -> value > 2)
.reduce(1,Integer::sum)
Run Code Online (Sandbox Code Playgroud)
回答: 10
但是如果我们使用stream而不是parallelStream我得到正确的和预期的 answer 7
并行运行时 a==b 为何为 false 但与组合器一起使用时却有效?
public class test {
public static int cal(final int i) {
return 1;
}
public static void main(String args[]) {
int a = IntStream.range(0, 3).reduce(0, (abc, cde) -> abc + cal(cde));
int b = IntStream.range(0, 3).parallel().reduce(0, (abc, cde) -> abc + cal(cde));
System.out.println(a == b); // false
int c = List.of(0, 1, 2).stream().parallel().reduce(0, (abc, cde) -> abc + cal(cde), Integer::sum);
System.out.println(a == c); // true
}
}
Run Code Online (Sandbox Code Playgroud)