【问题标题】:How to copy List items from two different List objects [closed]如何从两个不同的列表对象复制列表项[关闭]
【发布时间】:2020-07-27 15:48:37
【问题描述】:

我有两个如下列表:

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

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

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

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

【问题讨论】:

  • 请提供类定义。
  • 是否要将两个Lists 合并为第三个List
  • 无需将 Source 元素复制到 Target。列表元素的一对一映射。
  • 您希望如何从TemplateObject 转换为InUseObject
  • List list2 = list1.stream().map(InUseObject::getInUseObjFromTemplateObj).collect(Collectors.toList());可能会奏效。把你的映射逻辑方法"static InUseObject getInUseObjFromTemplateObj(TemplateObject)"方法

标签: java object generics copy listitem


【解决方案1】:

你可以像这样使用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());

【讨论】:

    【解决方案2】:
    List<InUseObject> out = in.stream()
                              .map(InUseObject::new)
                              .collect(Collectors::toList);
    

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

    【讨论】:

    • 看起来很整洁。将尝试它 Frighi 并会让你知道。谢谢。
    猜你喜欢
    • 2019-06-09
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 2022-11-17
    • 2018-05-02
    • 2021-12-25
    • 2021-12-02
    相关资源
    最近更新 更多