無理に訳すとわかりにくいのでそのままでよいのではないか。「map-reduce」は訳していない。「リデュース」でいいのでは。本書はサンプルコードの引数名に意味のある命名をしているので読み易いと思う。あるサンプルコードだと1文字程度のことが多い。version」の意味ではないか。Java8ならばOK。(4)の「collect(toList())」は「collect(toSet())」の間違いと思われる。StreamだとSetやListと違って内部構造を暴露しない。条件分岐やループが無いので、サイクロマチック複雑度は大きく下がる。カバレッジを満たすのもより楽になるかもしれない。collect()に渡しているtoList()やtoSet()が何をやっているかわからない。内部状態を持つCollecotrクラスのオブジェクトを返している。これがオブジェクトを収集してコレクションを返している。3番目の「よくない点」はNGとは言えないのではないか。変数に名前を付けることで対象が何かを明確にできるので、むしろ可読性を上げることができるケースがある。コレクションではなくStreamのままなら、処理自体は変わらないので問題はないのではないか。Stream/Lambdaさとデバッグが大変そう。途中で変数に入れてもStreamだと中身が見えない。中身を取り出すと処理が進行してしまう。メソッドチェーンされた途中の状態をデバッガでするには、現状ではコードを書き換える必要があるのではないか。1行で書くとブレークポイントは外側に設定されるのではないか。lambdaの中で改行すればlambdaにブレークポイントを設定できそう。lambda式内のthisは無名クラスのthisとは異なる。staticメソッドで、this相当は引数で渡される。現状のFindBugsでは意味不明なエラーで怒られる。Java8では静的解析ツールが壊滅状態。PMDはがんばってる。FindBugsはtrunkではlambda対応している。メトリックス収集系もだめらしい。Eclipseは、本体は対応しているが、プラグインはだめらしい。外部の変数をキャプチャしなければ問題ないらしい。type」は「ボックス型」がよいのではないか。普通は「ラッパー型」と呼ぶことが多い。Javaでは不可なので、コンテクストを設定して明示的に呼び分けるか、アダプタクラスを用意して呼び分ける必要がある。lambda式で値があるときにだけ呼ばれるようにできるはず。