簡體   English   中英

如何使用 stream 將列表類型 A 和 B 的元素復制到新列表類型 C

[英]How to Copy elements of list type A & B to new list type C using stream

我有一個 list-A 和 List-B 考慮到兩者的長度相同,現在我想通過將 A 和 B 復制到 C 來生成一個 List-C,其中 C 是一個 ZA2F2ED4F8EBC2CBB4C21A29DC,任何建議我如何使用 stream 來實現這一點。

不使用 stream 的代碼:

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 class 中有一個 arguments 構造函數,它會更容易

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

這是一種方法:

首先,創建兩個列表的流。 然后, zip這兩個流。 有關如何 zip 兩個流,請參見此處

現在你可以這樣做:

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());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM