Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何复制列表类型A&;的元素;B到使用流的新列表类型C_Java_Collections_Stream_Java Stream - Fatal编程技术网

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

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<&

考虑到列表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<>();
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());