如何从两个不同的列表对象复制列表项
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());
我有如下两个列表:
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());