java - 仅在另一个集合的列表中填充附加/额外字段(使用 lambda)

标签 java java-8 java-stream

我有一个原创 Collection ,List<Reviewers> ,还有一个新的List<ReviewPerson>其中一些字段来自 Reviewers将被复制到ReviewPerson .

新列表是以特殊方式构建的,而不是直接来自 reviewers.stream().map(...) 。但最后,我需要复制每个 bean 中存在的另外 2 列 statuscomments .

List<Reviewers> originalList = ... // from DAO
if (!originalList.isEmpty()) {
   List<ReviewPerson> newList = new ArrayList<ReviewPerson>();

   // this fills out some columns of the ReviewPerson, not all;
   // must use this partial construction from service class
   newList.addAll(service.initialPopulation()); 

   // At the end, need to copy: (1) status, (2) comments
   // ...
}

问题是我做不到

originalList.stream()
    .map(obj -> new ReviewPerson(obj.getField1(), obj.getField2(), 
                                 // ...
                                 obj.getStatus(), obj.getComments()))
    .collect(Collectors.toList());

因为我没有在集合中构造新对象。我该怎么办?

最佳答案

一种常见的解决方案是流式传输列表的(可能是相应的)索引,并使用相同的索引访问两个列表:

IntStream.range(0, originalList.size()).forEach(i -> {
    newList.get(i).setFieldA(originalList.get(i).getFieldA();
    newList.get(i).setFieldB(originalList.get(i).getFieldB();
    // etc...
});

但说实话,这可能是为了直播而直播。有时,一个好的老式直接 for 循环只是一个更好的解决方案。

关于java - 仅在另一个集合的列表中填充附加/额外字段(使用 lambda),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51617553/

相关文章:

Java 8 lambda 获取和删除列表中的元素

java - 为什么 Files.lines(和类似的 Streams)不会自动关闭?

java - 扫描仪 next() 输入不匹配异常 ..在 nextInt() 之后使用 nextLine()

java - 在 Struts 2 中的多语言支持的 Locale.getAvailableLocales() 中找不到 "ta_IN"

java - 如何使用 Stream API 合并然后区分集合?

java - Java 流中的 Haskell scanl 等价物是什么?

java - o.apache.kafka.clients.NetworkClient - 引导代理 <主机名> :9092 disconnected

java - 将函数列表应用于 Java 流 .map() 方法

Java 流式 Hashmap

java - 有没有办法将默认构造函数添加到接口(interface)