我试图编写一个递归方法,搜索IData对象列表并返回一个特定的实现.该列表包含实现接口IData的对象.
该接口有两种实现方式:
1)DataImpl
2)DataContainerImpl
DataContainerImpl有一个:
List<IData> children;
Run Code Online (Sandbox Code Playgroud)
所以它可以容纳嵌套的DataContainerImpl元素或只是普通的DataImpl.这是我做的:
public static DataContainerImpl findDataContainerWithName(Collection<IData> elements, String name) {
for (IData element : elements) {
if (element instanceof DataContainerImpl) {
DataContainerImpl container = (DataContainerImpl) element;
if (container.getName().equals(name)) {
return container ;
}
container = findDataContainerWithName(container.getChildren(), name);
if (container != null) {
return container ;
}
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
不完全确定你在这里做了什么,但是在它前面没有"返回"的情况下递归调用"findContainerByName()"对你没有任何好处.
递归调用将返回,但随后调用将下降到底部并返回null.
例如,如果您的列表只包含1个DataContainerImpl,其名称与您调用方法的名称不匹配,但它在其中包含仅包含1个DataImpl的列表,您仍将返回null.这是你想要的吗?
| 归档时间: |
|
| 查看次数: |
1457 次 |
| 最近记录: |