合并具有列表字段的多个对象

时间:2019-02-08 09:37:18

标签: java merge

我正在使用以字符串属性列表作为其属性的对象:

public class MyObjectOne {
     private List<String> listOne;
     private List<String> listTwo;
     private MyObjectTwo myObjectTwo;
}

public class MyObjectTwo {
     private List<String> listOne;
     private List<String> listTwo;
} 

我想合并多个MyObjectOne对象, 以这种方式,我得到一个合并了所有列表的新对象,包括嵌套对象MyObjectTwo中的列表。

我意识到可能有更好的方法来构造程序,因此我不必这样做,但是我对这段代码感到困惑。

有什么方法可以实现而不必为对象明确编写映射器?实际上,每个对象都具有上述List属性的10+个,并且有多个嵌套对象,因此将其全部写出将是一个巨大的痛苦。

2 个答案:

答案 0 :(得分:1)

我将使用接口,该接口可以返回所有要合并的列表和所有嵌套对象。 像这样:

interface Mergable {
    List<List<String>> getAllLists();

    List<Mergable> getAllNestedObjects();
}

class MyObjectOne implements Mergable {
    private List<String> listOne;
    private List<String> listTwo;
    private MyObjectTwo myObjectTwo;

    @Override
    public List<List<String>> getAllLists() {
        return Stream.of(listOne, listTwo).collect(toList());
    }

    @Override
    public List<Mergable> getAllNestedObjects() {
        return Stream.of(myObjectTwo).collect(toList());
    }
}

class MyObjectTwo implements Mergable {
    private List<String> listOne;
    private List<String> listTwo;

    @Override
    public List<List<String>> getAllLists() {
        return Stream.of(listOne, listTwo).collect(toList());
    }

    @Override
    public List<Mergable> getAllNestedObjects() {
        return Collections.emptyList();
    }
}

然后通过递归将它们全部合并到List或要存储它的任何位置。

答案 1 :(得分:0)

MyObjectOne添加以下方法,并为listOnelistTwo的{​​{1}}类获取方法。顺便说一句,您应该首先自己尝试一下。

MyObjectTwo