【发布时间】:2016-12-06 15:44:45
【问题描述】:
这个问题很笼统,但我觉得最好用一个具体的例子来解释。假设我有一个包含许多嵌套子目录的目录,并且在其中一些子目录中有以“.txt”结尾的文本文件。示例结构可以是:
dir1
dir2
file1.txt
dir3
file2.txt
file3.txt
如果 Java 中有一种方法可以构建一个可以调用以返回连续文本文件的方法,我会很感兴趣:
TextCrawler crawler = new TextCrawler(new File("dir1"));
File textFile;
textFile = crawler.nextFile(); // value is file1.txt
textFile = crawler.nextFile(); // value is file2.txt
textFile = crawler.nextFile(); // value is file3.txt
挑战来了:不能将所有文本文件的内部列表保存在爬虫对象中。那是微不足道的。在这种情况下,您只需在初始化中构建一个递归构建文件列表的方法。
是否有一种暂停递归方法的通用方法,以便在再次调用它时返回到堆栈中它离开的特定点?或者我们是否必须针对每种情况编写一些特定的东西,并且解决方案必须因文件爬虫、组织结构图搜索、递归素数查找器等而有所不同?
【问题讨论】:
-
所以你希望这个 `nextFile()' 方法在没有状态的情况下有状态?
-
递归函数通常具有引用透明性。你所要做的就是给它同样的参数,它就会做同样的操作。
-
@tirpitz.verus 我认为他想要一个对象
crawler能够保存通用状态信息以便在进入递归搜索时重复使用。 -
或者可能编写一个递归方法,接收 java.util.function.Consumer 并为结构的每个元素执行它。