2
次の2つのコードスニペットで同じ結果が得られます。 flatMap
でStream APIにflatten()メソッドがないのはなぜですか?
:
identity
を使用して
flatMap
続い
map
で
Stream.iterate(2, n -> n + 4)
.flatMap(n -> Stream.of(n, -(n + 2)));
:
Stream.iterate(2, n -> n + 4)
.map(n -> Stream.of(n, -(n + 2)))
.flatMap(Function.identity());
だから、(Scalaの中のようなStream
インターフェースで引数なしのflatten
方法が含まれるように、自然と思われますStream)、前の例を次のように書くことができます。
Stream.iterate(2, n -> n + 4)
.map(n -> Stream.of(n, -(n + 2)))
.flatten();
Stream
APIにはなぜflatten()
メソッドがありませんか?
APIは、すでにかなり肥大化しています。これは不必要な追加になります。 – 4castle
私はこの質問がポイントを逃すと思います。基本的なAPIの設計では、達成したいことを達成するために少ししか入れないと言います。可能な限り、flatten()メソッドの理由はありません。あらゆる可能なユースケースをAPIの専用メソッドとして置くことを想像してみてください。それはかなり素早く肥大化するだろう。 – loonytune
私はAPIの浮揚が有効なポイントではないと思います。私がこの質問で述べたように、Scalaには 'flatten'があります(flatMapもあります)。なぜなら、 'map'と' flatten'を組み合わせることで問題が解決できるのであれば、なぜ 'flatMap'をインクルードするのでしょうか?もちろん、flatMapが存在する理由は、パフォーマンスと利便性です。これは最小限のAPIと便利な機能のトレードオフです。 –