递归流 API
Recursive Streaming API
我目前正在研究一个小型图论算法,它使用递归深度优先搜索。
由于它是递归的,我问自己,我是否应该使用 Stream API 来执行这样的任务或使用 Iterators 并为每个 Loops.
这是我的代码:
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...
streaming API中的filter方法是在foreach之前还是while foreach中过滤掉不匹配的对象? (B和C完全一样吗?)
哪种方法最快?
感谢任何帮助!
OK 方法 B 和 C 完全一样!
不确定迭代器方式是否更快,但由于 B 需要更少 space,我选择那个!
我目前正在研究一个小型图论算法,它使用递归深度优先搜索。
由于它是递归的,我问自己,我是否应该使用 Stream API 来执行这样的任务或使用 Iterators 并为每个 Loops.
这是我的代码:
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...
streaming API中的filter方法是在foreach之前还是while foreach中过滤掉不匹配的对象? (B和C完全一样吗?)
哪种方法最快?
感谢任何帮助!
OK 方法 B 和 C 完全一样! 不确定迭代器方式是否更快,但由于 B 需要更少 space,我选择那个!