首页 > 解决方案 > Java 流将对象 List 的每个属性设置为另一个 List

问题描述

我目前有一个对象列表,例如

List<Foo> fooList = new ArrayList<>();

Foo 在哪里:

public class Foo {
    public Bar bar;

    // getters and setters
}

现在有了另一个,List<Bar> barList我想将每个元素设置为使用 Java 流的Bar每个内部Foo.Bar元素。fooList

map我尝试使用with 函数来做到这一点,setBar但我不能在里面调用“set” map

标签: javalistjava-stream

解决方案


你可以这样做。它返回一个新的更改Foo对象列表。原来的也改了。我本可以使用 peek 来调用更改,但peek以这种方式使用被认为是不好的做法。

IntStream.range(0, fooList.size()).mapToObj(i -> {
    fooList.get(i).setBar(barList.get(i));
               return fooList.get(i);})
    .collect(Collectors.toList());
                

我不会为此使用流,而是使用简单的 for 循环。例如,

for (int i = 0; i < fooList.size(); i++) {
    fooList.get(i).setBar(barList.get(i));
}

或使用增强的 forloop 和本地索引。

int i = 0;
for (Foo f : fooList) {
    f.setBar(barList.get(i++));
}

fooList这些解决方案假定存在元素到元素的一对一有序映射barList


推荐阅读