在dto到bean的转换中,
只有在bean中找不到dto时,我才尝试添加dto .或者如果dto的id为空
我使用没有匹配的流。
当我尝试增加很多车时,只添加第一辆车。
List<Car> cars = bean.getCar();
List<CarDto> carsDto = dto.getCar();
for (CarDto carDto : carsDto) {
if (cars.stream().noneMatch(e -> Objects.equals(e.getId(), carDto.getId()) || carDto.getId()==null )) {
//get car from bd....
bean.addCar(car);
}
}发布于 2018-05-08 17:19:33
在carDto.getId()==null中设置条件noneMatch将阻止您接受具有null id的CarDto。
您可以将其更改为
if (carDto.getId() == null
|| cars
.stream()
.noneMatch(e -> Objects.equals(e.getId(), carDto.getId()))) 更新:
感谢Holger@的建议:您可以将第二个if条件简化为(并且不需要使用Objects.equals,因为carDto.getId不能为null )。
cars.stream()
.map(Car::getId)
.noneMatch(carDto.getId()::equals)发布于 2018-05-08 17:32:02
您还可以完全使用流API,而不必求助于命令式循环:
List<Car> cars = bean.getCar();
List<CarDto> carsDto = dto.getCar();
Set<String> carSet = cars.stream()
.map(car -> car.getId()).collect(Collectors.toSet());
carsDto.stream()
.filter(car -> car.getId() == null || !carSet.contains(car.getId()))
.forEach(bean::addCar);如果Car在id上是可比的,那么您也可以只使用carSet.contains(car),避免预先创建汽车ID集。
https://stackoverflow.com/questions/50238933
复制相似问题