在java中使用递归字段转换对象并换行到另一个
出于某些原因,我需要一个新对象来包装从其他API获得的数据 我面临的问题是不知道如何处理来自原始对象的递归字段 以下是示例代码:在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();
//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());
}