「Javaによる関数型プログラミング」の「7.1.3 TailCall関数型インタフェース」で紹介されているTailCallについてです。
例のごとくソースは公式サイトを参照してください。
https://media.pragprog.com/titles/vsjava8/code/recur/fpij/TailCall.java
このインタフェースでは、invokeというメソッドで、再起呼出しをStremに置き換えています。内容は合っていると思いますが、飛躍が大きいので、invokeをループで書くとこうなります。
default T invokeLegacy() {
TailCall<T> c = this;
while(!c.isComplete()) {
c = c.apply();
}
return c.result();
}
ループで書いてみると簡単ですね。streamも便利でいいのですが、慣れないうちは、ループだったらどう書くかを考えてみるといいかもしれません。