Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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_Recursion_Java 8_Java Stream - Fatal编程技术网

在java中使用递归字段转换对象并换行到另一个

在java中使用递归字段转换对象并换行到另一个,java,recursion,java-8,java-stream,Java,Recursion,Java 8,Java Stream,出于某些原因,我需要一个新对象来包装从其他API获得的数据 我面临的问题是不知道如何处理来自原始对象的递归字段 以下是示例代码: //original object public class Resource{ private String name; private String content; private Integer type; private List<Resource> children = new LinkedList();

出于某些原因,我需要一个新对象来包装从其他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...
}
//原始对象
公共类资源{
私有字符串名称;
私有字符串内容;
私有整数类型;
private List children=new LinkedList();
public void addChildrenResource(资源子级){
this.children.add(children);
}
//接球手和接球手。。。
}

//对象试图转换
公共类菜单{
私有字符串名称;
私有字符串url;
私有整数类型;
私有列表子菜单=新建链接列表();
public void addChildrenResource(菜单子菜单){
此.children.add(子菜单);
}
//接球手和接球手。。。
}

我所做的实现与递归字段无关…
这是我的密码

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());  
List resources=rpcService.getResources();
//在这里,我无法处理子菜单或子菜单部分。。
列表菜单=resources.stream().map(r->new菜单(r.getName(),
r、 getContent(),r.getType()).collect(collector.toList());

递归可能有很多层,所以如何使用递归字段转换它

注意:
Resource
类来自另一个模块,因此我无法更改它,因为命名问题,我必须转换它。

我们不必通过
Stream()
来解决它,只要找到一种方法来解决它。

您需要创建一个方法并递归调用此方法:

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());
}
公共静态列表转换(列表资源){
返回资源==null?null:
resources.stream()
.map(r->新建菜单(r.getName(),r.getContent(),r.getType(),convert(r.getChildren)))
.collect(Collectors.toList());
}

您能解释一下为什么需要这样复制类吗?您可以只在资源类上使用继承,而不复制它(如果这是一个选项的话)。虽然您可能无法更改类本身,但您可以从类中无限地继承并在需要时覆盖它的行为。它真的是递归的吗?或者你是说嵌套得很深?嗯,我是说嵌套得很深。。
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());
}