【问题标题】:Comparing 2 dto List and set the values using Java streams比较 2 dto List 并使用 Java 流设置值
【发布时间】:2020-09-25 18:35:58
【问题描述】:

我一直在比较 2 个 Dto 列表并设置它们的值。

      List<DbDTO> dbList = data
      List<PriDTO> prList = data

   //dbDTO contains PriDTO

    Class DbDTO{
       private PriDTO prdto;
     }

    dbList.stream().filter(x -> (prList.stream().filter(y -> y.getId().equals(x.getRefId()) 
            && y.getName().equals(x.getName()).forEach(x-> x.setPrdto(y)))))

一旦找到匹配项,我需要将 PriDTO 设置为 DbDTO。过滤后我无法继续。需要一些帮助。

提前致谢

【问题讨论】:

  • 您可能正在寻找 anyMatch 而不是内部的 filter..
  • 是的。如果 anyMatch 然后设置值。

标签: arraylist java-8 java-stream


【解决方案1】:

过滤后可以使用.findFirst获取第一个,如果不匹配则为null

dbList.forEach(x -> x.setPrdto(prList.stream()
                                     .filter(y -> y.getId().equals(x.getRefId()) 
                                               && y.getName().equals(x.getName()))
                                     .findFirst()
                                     .orElse(null)));

【讨论】:

  • 这里得到匹配的元素后使用setter设置值x.setPrdto(..)
  • 如何对 prList 进行空检查?如果在流式传输之前不等于 null,我不想添加额外的条件
  • prList 可以为空或者它的元素可以为空?
  • prList 可以为空
  • 最好将所有这些操作放在一个关于空检查的 if 条件中,因为如果 prList 为空,则不需要任何操作。
猜你喜欢
  • 2018-05-30
  • 1970-01-01
  • 2018-10-31
  • 2010-12-10
  • 2013-04-18
  • 1970-01-01
  • 1970-01-01
  • 2017-09-20
相关资源
最近更新 更多