我目前正在研究一种小型图论算法,该算法使用递归深度优先搜索。
由于它是递归的,所以我要问自己,是否应该使用Stream API来执行此类任务,还是应该针对每个循环使用Iterators。
这是我的代码:
private void processNext(Node node) {
//METHOD A
for (Node neighbour : node) {
if (!connectedNodes.contains(neighbour)) {
connectedNodes.add(neighbour);
processNext(neighbour);
}
}
//OR METHOD B
node.getNodes().stream().filter(not(connectedNodes::contains)).forEach(e -> {
connectedNodes.add(e);
processNext(e);
});
//OR METHOD C
node.getNodes().stream().forEach(e -> {
if (!connectedNodes.contains(e)) {
connectedNodes.add(e);
processNext(e);
}
});
}
方法A和C可以按预期的100%工作,但是我不确定B ...
流式API中的filter方法是在foreach之前还是foreach期间过滤掉不匹配的对象? (B和C完全一样吗?)
哪种方法最快?
任何帮助都感激不尽!
最佳答案
确定方法B和C的工作原理完全相同!
不知道迭代器的方式是否更快,但是由于B需要更少的空间,所以我打算使用它!
关于java - 递归流API,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40305491/