如何从两个不同的列表对象复制列表项

How to copy List items from two different List objects

我有如下两个列表:

List<TemplateObject> list1;
List<InUseObject> list2;

我需要从模板(源)读取并通过获取从模板复制的所有元素值来创建新的 InUse 实例(目标)。鉴于所有 fields/elements 在两个列表中都具有相同的数据类型。

有多种实现方式(例如克隆、shallow/deep 复制)。

问题:如何使用 Java 8+ 实现它。最好是一个班轮?

List<InUseObject> out = in.stream()
                          .map(InUseObject::new)
                          .collect(Collectors::toList);

当然,您的 InUseObject 必须在其构造函数中从 TemplateObject 复制每个公共字段。

您可以像这样使用 Stream#map

List<InUseObject> list2 = list1.stream()
        .map(obj -> new InUseObject(obj.getId(), obj.getPropertyname(), obj.getPropertyvalue()))
        .collect(Collectors.toList());

您还可以在 InUseObject 中定义构造函数,接受 TemplateObject:

public InUseObject(final TemplateObject obj) {
    this(obj.getId(), obj.getPropertyname(), obj.getPropertyvalue());
}

然后您可以在映射时使用构造函数引用。

List<InUseObject> list2 = list1.stream()
        .map(InUseObject::new)
        .collect(Collectors.toList());