首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java流不匹配多个条件

Java流不匹配多个条件
EN

Stack Overflow用户
提问于 2018-05-08 17:08:28
回答 2查看 1.5K关注 0票数 2

在dto到bean的转换中,

只有在bean中找不到dto时,我才尝试添加dto .或者如果dto的id为空

我使用没有匹配的流。

当我尝试增加很多车时,只添加第一辆车。

代码语言:javascript
复制
 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);
    }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-08 17:19:33

carDto.getId()==null中设置条件noneMatch将阻止您接受具有null id的CarDto

您可以将其更改为

代码语言:javascript
复制
if (carDto.getId() == null 
         || cars
             .stream()
             .noneMatch(e -> Objects.equals(e.getId(), carDto.getId()))) 

更新:

感谢Holger@的建议:您可以将第二个if条件简化为(并且不需要使用Objects.equals,因为carDto.getId不能为null )。

代码语言:javascript
复制
cars.stream()
    .map(Car::getId)
    .noneMatch(carDto.getId()::equals)
票数 5
EN

Stack Overflow用户

发布于 2018-05-08 17:32:02

您还可以完全使用流API,而不必求助于命令式循环:

代码语言:javascript
复制
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);

如果Carid上是可比的,那么您也可以只使用carSet.contains(car),避免预先创建汽车ID集。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50238933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档