Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将多个对象与列表字段合并_Java_Merge - Fatal编程技术网

Java 将多个对象与列表字段合并

Java 将多个对象与列表字段合并,java,merge,Java,Merge,我正在处理具有字符串列表作为其属性的对象: public class MyObjectOne { private List<String> listOne; private List<String> listTwo; private MyObjectTwo myObjectTwo; } public class MyObjectTwo { private List<String> listOne; priva

我正在处理具有字符串列表作为其属性的对象:

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中的列表

我意识到可能有更好的方法来组织程序,这样我就不必这么做了,但我还是坚持使用这段代码

有没有办法在不必为对象显式编写映射器的情况下实现这一点?实际上,每个对象都有10+个这样的列表属性,并且有多个嵌套对象,因此将其全部写出来将是一件非常痛苦的事情

将以下方法添加到MyObjectOne中,并将listOne和listTwo的getter添加到MyObjectTwo类中。顺便说一句,你应该先自己尝试一下

public List<String> merge(){
    List<String> result = new ArrayList();
    result.addAll(listOne);
    result.addAll(listTwo);
    result.addAll(myObjectTwo.getListOne());
    result.addAll(myObjectTwo.getListTwo());
    return result;
}

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

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

然后通过递归将它们合并到列表中或存储到任何地方

我不想要一个大列表,我想要一个新对象,其中listOne字段全部合并到listOne属性中,listTwo字段全部合并到listTwo属性中,等等。另外,我可能应该提到,我不能编辑对象本身。@Spacejockey请编辑这个问题,因为不清楚这是一个要求。