我有一个列表-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<>();
keys.forEach(key -> {
KeyValue keyValue = new KeyValue();
keyValue.setKey(key);
keyValue.setValue(values.get(i++));
keyValues.add(keyValue);
});
你可以使用 IntStream 如果你有一个参数构造函数在 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
有 AllArgsConstructor
看起来像这样。
public KeyValue(key k, value v) {
setKey(k);
setValue(v);
}
因为这样你就可以做,
zip(keys.stream(), values.stream(), KeyValue::new)
.collect(Collectors.toList());