根据 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/