Java 如何复制列表类型A&;的元素;B到使用流的新列表类型C
考虑到列表a和列表B的长度相同,我有一个列表a和列表B,现在我想通过将a和B中的每一个复制到C来生成一个列表C,其中C是一个由字段a和B组成的类,我可以建议如何使用流来实现这一点 不使用流的代码:Java 如何复制列表类型A&;的元素;B到使用流的新列表类型C,java,collections,stream,java-stream,Java,Collections,Stream,Java Stream,考虑到列表a和列表B的长度相同,我有一个列表a和列表B,现在我想通过将a和B中的每一个复制到C来生成一个列表C,其中C是一个由字段a和B组成的类,我可以建议如何使用流来实现这一点 不使用流的代码: int i=0; List<key> keys = cmdBody.getKeys(); List<value> values = storage.getValues(); List <KeyValue> keyValues = new ArrayList<&
int i=0;
List<key> keys = cmdBody.getKeys();
List<value> values = storage.getValues();
List <KeyValue> keyValues = new ArrayList<>();
keys.forEach(key -> {
KeyValue keyValue = new KeyValue();
keyValue.setKey(key);
keyValue.setValue(values.get(i++));
keyValues.add(keyValue);
});
inti=0;
List keys=cmdBody.getKeys();
列表值=storage.getValues();
List keyValues=new ArrayList();
键。forEach(键->{
KeyValue KeyValue=新的KeyValue();
设置键(key);
keyValue.setValue(values.get(i++));
添加(keyValue);
});
您可以使用,如果您在KeyValue
类中有一个参数构造函数,则使用起来会更简单
IntStream.range(0, keys.size())
.mapToObj(i -> new KeyValue(keys.get(i), values.get(i)))
.collect(Collectors.toList());
这里有一个方法:
首先,创建两个列表的流。然后,压缩两条流。有关如何压缩两条流,请参阅
现在您可以执行以下操作:
zip(keys.stream(), values.stream(), (k, v) -> {
KeyValue keyValue = new KeyValue();
keyValue.setKey(k);
keyValue.setValue(v);
return keyValue;
}).collect(Collectors.toList());
如果KeyValue
有一个allargsconstuctor
看起来像这样,这将非常有用:
public KeyValue(key k, value v) {
setKey(k);
setValue(v);
}
因为这样你就可以做到:
zip(keys.stream(), values.stream(), KeyValue::new)
.collect(Collectors.toList());