将程序风格方法转换为功能风格

下面的代码应该是通过遍历从红黑树的根到底部的左节点来计算黑节点。 黑色节点的数量存储在变量black

 fun isBalanced1(): Boolean { require(!isEmpty()) { "Cannot check empty tree for balance"} var x = root var black = 0 while(x != null) { if(!isRed(x)) { black++ } x = x.left } return isBalanced(root, black) } 

风格是程序性的,它工作正常。

现在怎么可能在一个更实用的风格上做同样的事情呢?

这就是我想到的:

 fun isBalanced1(): Boolean { require(!isEmpty()) { "Cannot check empty tree for balance" } val black = generateSequence(root) { node -> node.left } .takeWhile { node -> node != null } .filter { node -> !isRed(node) }.count() return isBalanced(root, black) } 

它使用序列生成器来遍历树,而节点不是null ,然后过滤黑色并计算所有匹配。

这是转换这个树遍历代码的正确方法还是在Kotlin有更好的选择?

遵循评论中给出的建议,代码应如下所示:

 fun isBalanced(): Boolean { require(!isEmpty()) { "Cannot check empty tree for balance" } val blackCount = generateSequence(root) { node -> node.left } .count { !isRed(it) } return isBalanced(root, blackCount) } 

count()方法在其自己的段落中以提高可读性,并且takeWhile不是必需的。