преобразовать объект и обернуть в другой с рекурсивным полем в Java - PullRequest
0 голосов
/ 05 сентября 2018

По некоторым причинам мне нужен новый объект, чтобы обернуть данные, которые я получаю от другого API.

Проблема, с которой я столкнулся, заключалась в том, что я не мог обрабатывать рекурсивное поле исходного объекта.

Вот пример кода:

//original object
public class Resource{
    private String name;
    private String content;
    private Integer type;
    private List<Resource> children = new LinkedList();
    public void addChildrenResource(Resource children) {
        this.children.add(children);
    }
    //getters&setters...
}

//the object try to convert
public class Menu{
    private String name;
    private String url;
    private Integer type;
    private List<Menu> subMenu = new LinkedList();
    public void addChildrenResource(Menu subMenu) {
        this.children.add(subMenu);
    }
    //getters&setters...
}

Реализация, которую я сделал, я понятия не имею, что делать с рекурсивным полем ...
Вот мой код ..

List<Resource> resources = rpcService.getResources();

//Here I can't handle the subMenu or children part..
List<Menu> menus = resources.stream().map(r -> new Menu(r.getName(), 
r.getContent(), r.getType())).collect(Collectors.toList());  

Рекурсия может состоять из множества слоев, так как я могу преобразовать ее с помощью рекурсивного поля?

Примечание: класс Resource из другого модуля, поэтому я не могу его изменить, для проблемы с именами я должен преобразовать его.
Нам не нужно решать это к Stream(), просто найдите способ выяснить это.

1 Ответ

0 голосов
/ 05 сентября 2018

Вам нужно создать метод и вызвать его рекурсивно:

public static List<Menu> convert(List<Resource> resources) {
    return resources == null ? null :
            resources.stream()
                    .map(r -> new Menu(r.getName(), r.getContent(), r.getType(), convert(r.getChildren)))
                    .collect(Collectors.toList());
}
...