roo*_*kie 2 java recursion list arraylist
我试图用getMyClassTypes()的递归调用填充列表myClassTypes.但是每次有对该方法的递归调用时它都会被初始化.而且,由于这个原因,我失去了很少的价值.我理解问题是在本地声明:List myClassTypes = new ArrayList <>(); 但是,我不想在类级别声明列表.这是我正在使用的代码:
private List<MyClassType> getMyClassTypes(final String path) throws SVNException {
final Collection<SVNDirEntry> svnDirectoryEntries = svnRepository.getDir(path, -1, null, (Collection<SVNDirEntry>) null);
final Iterator<SVNDirEntry> svnDirectoryEntryIterator = svnDirectoryEntries.iterator();
final List<MyClassType> myClassTypes = new ArrayList<>();
while (svnDirectoryEntryIterator.hasNext()) {
final SVNDirEntry entry = svnDirectoryEntryIterator.next();
final String fileName = entry.getName();
if (!path.isEmpty() && path.matches(SUB_DIRECTORY_NAME_PATTERN) && fileName.endsWith(".xml")) {
final MyClassType myClassType = new MyClassType(path, fileName);
myClassTypes.add(myClassType);
}
/*
* Check if the entry is a directory recursively.
*/
if (someCondition) {
getMyClassTypes((path.equals("")) ? entry.getName() : path + "/" + entry.getName());
}
}
return myClassTypes;
}
Run Code Online (Sandbox Code Playgroud)
即使在"n次"递归调用之后,如何管理'myClassTypes'以包含所有值?
将List<MyClassType>实例作为参数传递给方法,而不是在方法内创建它.
这种方式只创建一个ArrayList实例,甚至可以将返回类型更改为void.
private void getMyClassTypes(final String path, List<MyClassType> myClassTypes) throws SVNException
{
final Collection<SVNDirEntry> svnDirectoryEntries = svnRepository.getDir(path, -1, null, (Collection<SVNDirEntry>) null);
final Iterator<SVNDirEntry> svnDirectoryEntryIterator = svnDirectoryEntries.iterator();
while (svnDirectoryEntryIterator.hasNext()) {
final SVNDirEntry entry = svnDirectoryEntryIterator.next();
final String fileName = entry.getName();
if (!path.isEmpty() && path.matches(SUB_DIRECTORY_NAME_PATTERN) && fileName.endsWith(".xml")) {
final MyClassType myClassType = new MyClassType(path, fileName);
myClassTypes.add(myClassType);
}
/*
* Check if the entry is a directory recursively.
*/
if (someCondition) {
getMyClassTypes((path.equals("")) ? entry.getName() : path + "/" + entry.getName(), myClassTypes);
}
}
}
Run Code Online (Sandbox Code Playgroud)