如何使用流将列表类型A & B的元素复制到新的列表类型C。

问题描述 投票:0回答:1

我有一个列表-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);
});
java collections stream java-stream
1个回答
1
投票

你可以使用 IntStream 如果你有一个参数构造函数在 KeyValue 阶层

IntStream.range(0, keys.size())
             .mapToObj(i -> new KeyValue(keys.get(i), values.get(i)))
             .collect(Collectors.toList());

0
投票

这里有一个方法。

首先,创建两个列表的流。然后.., 压缩 的两个流。关于如何压缩两个流,请参见 此处.

现在你可以做。

zip(keys.stream(), values.stream(), (k, v) -> {
    KeyValue keyValue = new KeyValue();
    keyValue.setKey(k);
    keyValue.setValue(v);
    return keyValue;
}).collect(Collectors.toList());

这将是 真的 有助于 KeyValueAllArgsConstructor 看起来像这样。

public KeyValue(key k, value v) {
    setKey(k);
    setValue(v);
}

因为这样你就可以做,

zip(keys.stream(), values.stream(), KeyValue::new)
    .collect(Collectors.toList());
© www.soinside.com 2019 - 2024. All rights reserved.