我目前正在研究一种小型图论算法,该算法使用递归深度优先搜索。
由于它是递归的,所以我要问自己,是否应该使用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/

10-10 02:34