java - 在流管道中保存到数据库

标签 java java-8 functional-programming java-stream side-effects

根据 the documentation on Oracle's website :

Side-effects in behavioral parameters to stream operations are, in general, discouraged, as they can often lead to unwitting violations of the statelessness requirement, as well as other thread-safety hazards.



这是否包括将流的元素保存到数据库?

想象一下以下(伪)代码:

public SavedCar saveCar(Car car) {
  SavedCar savedCar = this.getDb().save(car);
  return savedCar;
}

public List<SavedCars> saveCars(List<Car> cars) {
  return cars.stream()
           .map(this::saveCar)
           .collect(Collectors.toList());
}

与此实现相反的不良影响是什么:

public SavedCar saveCar(Car car) {
  SavedCar savedCar = this.getDb().save(car);
  return savedCar;
}

public List<SavedCars> saveCars(List<Car> cars) {
  List<SavedCars> savedCars = new ArrayList<>();
  for (Cat car : cars) {
    savedCars.add(this.saveCar(car));
  }
  return savedCars.
}

最佳答案

最简单的例子是:

cars.stream()
    .map(this:saveCar)
    .count()

在这种情况下,从 java-9 开始,map不会被执行;因为您不需要它来了解 count ,根本。

在其他多种情况下,副作用会给您带来很多痛苦;在一定条件下。

关于java - 在流管道中保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59898962/

相关文章:

JavaFX ImageView 图像未显示

java - TreeMap 作为泛型类

javascript - 将 AWS Chime 集成到 Java 应用程序中

java - Stream.reduce 的累加器参数中通配符的目的是什么?

functional-programming - 如何编写不更改状态的应用程序(使用功能语言)?

Java 详细 GC 日志配置 - 未创建文件

java-8 - Weblogic 12.2.1 + Java 8 + Spring Data JPA + Hibernate 5.x部署冲突

Java构造函数引用赋值 VS 新建对象赋值

haskell - 如何纠正这个haskell对数函数?

C# foreach 与功能性每个