1
在必要的編碼風格的常見循環模式是遵循對象鏈查找結束時,例如:走對象鏈遞歸函數式
private ThreadGroup rootOf(ThreadGroup leaf) {
ThreadGroup rootGroup = leaf;
ThreadGroup parentGroup;
while ((parentGroup = rootGroup.getParent()) != null) {
rootGroup = parentGroup;
}
return rootGroup;
}
(從this answer)
我覺得必須有一個標準的功能模式,這在邏輯上等同於此,但我不確定它是什麼。我拿出遞歸方法使用以下Vavr's Option
:
private ThreadGroup rootOf(ThreadGroup leaf) {
return Option.of(leaf.getParent()) // returns None for null
.map(this::rootOf)
.getOrElse(leaf);
}
但它好像有應該是一個辦法做到這一點沒有明確的遞歸,尤其是在無尾調用優化的(我像Java語言可能想象的東西與foldLeft()
模糊不清,但在迭代計算的價值流上,如果這有什麼意義呢?)
這裏的標準功能方法是什麼?
而這個工程,因爲該濾波器可以確保我們只迭代,直到我們達到根,然後停止我們NPE過嗎? –
是的。這正是如此。 – vandale
如果樹爲空,則引發NoSuchElementException。可能用'''.headOption()'''替代''.findFirst()。get()'''並可能添加'''.filter(Objects :: nonNull)'''? – Zaaier