【问题标题】:How to Copy elements of list type A & B to new list type C using stream如何使用流将列表类型 A 和 B 的元素复制到新的列表类型 C
【发布时间】:2020-08-07 02:11:05
【问题描述】:

考虑到两者的长度相同,我有一个列表-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】:

    你可以使用IntStream,如果你在KeyValue类中有一个参数构造函数会更容易

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

    【讨论】:

      【解决方案2】:

      这是一种方法:

      首先,创建两个列表的流。然后,zip 两个流。有关如何压缩两个流,请参阅here

      现在你可以这样做了:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-21
        • 2021-02-18
        • 1970-01-01
        • 1970-01-01
        • 2016-10-03
        相关资源
        最近更新 更多