我想在recursivly构建项目列表中找到一个名称。 项目可以有子项目,可以有子项目等。
第一级它起作用了。对于更深层次,正确找到的名称/ ID映射从堆栈中获取覆盖。由于字符串结果,我必须在结尾写入return语句。所以我有一个精神障碍,我怎么能解决这个问题。感谢您的帮助。
public String getNameForID(List<Item> top, long id, String name ) {
for (Item i : top) {
if (i.getId() == id) {
name = i.getName();
return name;
}else{
this.getNameForID(i.getSubItemsList(), id,name);
}
}
return name;
}
答案 0 :(得分:1)
这一定是你要找的东西:
public String getNameById(List<Item> items, long id) {
// boundary condition
if (items == null || items.isEmpty()) {
return null;
}
// looping
for (Item item : items) {
// if current is
if (item.getId() == id) {
return item.getName();
}
// recursion
String name = getNameById(item.getSubItemsList(), id);
// if nested found
if (name != null) {
return name;
}
}
// boundary condition
return null;
}
答案 1 :(得分:1)
您对getNameForID
的递归调用必须也能够返回值。它还需要能够指示没有找到值,以便终止递归。
根据@ sp00m之前删除的(稍微不正确的)答案,试试这个:
public String getNameById(List<Item> items, long id) {
// sanity checking conditions to terminate recursion early
if (items == null || items.isEmpty()) {
return null;
}
// iterate over collection
for (Item item: items) {
if (item.getId() == id) {
return item.getName();
} else {
String name = getNameById(item.getSubItemsList(), id);
if (name != null) {
return name;
}
}
}
// final termination condition - entry wasn't in this list
return null;
}
答案 2 :(得分:0)
您不会将此处返回的值分配给名称:
this.getNameForID(i.getSubItemsList(), id,name);
实际上您不需要参数名称 - 只需在每次调用中返回名称或 null