ストリームを使用して単一のオブジェクトの地図

letthefireflieslive:

これは、Java 8の流れの良いユースケースであります:

final Car carWithInterior = Stream.of(carWithEngine)
            .map(car -> installSeats.execute(car))
            .map(car -> installDashBoard.execute(car))
            .map(car -> installSunRoof.execute(car))
            .collect(car);

carWithEngineですCar(W /ダッシュボード)の車がinstallSunroofへのパスであっても、屋根には穴がありませんので、時々 、それはいずれかを実行していないことに注意してください。私はする必要があり、常に最後に車を取得、インストール/マッピングプロセスの。

インストール手順が必要です(私はそれをストリーミング考える理由だと)、次のインストールは、時にはそれの操作を実行するために、パスの車のインスタンスからのパラメータが必要な場合があります。

  1. これは、Java 8のストリームのために良いユースケースですか?

  2. Obvioulsyは、最後に私の収集は適切ではありません。どのように私は、このインストール/組立ラインの終わりに車を取得する必要がありますか?findFirst().get()動作しますが、私はいつも最後に車を取得する必要がありますので、インストールはして何もしなかった場合でもそれは、悪いことだと思うだろうcarWitEngineと私は複数の要素をストリーミングしていませんよ。

私は必ず車が組み立てられる方法はないんだけど、あなたがこのアナロジーのためにインテリアを追加する前に、最初にエンジンを配置する必要がありましょう

shinjw:

あなたは、単一のオブジェクトに対して操作を実行するために探しているので。Javaの8 オプションは適切であろう。

Builderパターンこれらのマップの各操作が単純に水和された場合(フィル・Cさんのコメントは)間違いなく訪れる価値があるCarオブジェクトを。

  1. 単一のオブジェクトのストリームをオープンタップすると、ストリームのために良いユースケースではありません。
  2. 場合は、危険な領域(サイドeffecty)に進出していCarて、ストリームに落とします.map()操作。扱うときStreams、それ非常にこれらの操作、それらが意図されている方法を使用することをお勧めします。あなたは、ストリームから要素を削除することを計画している場合.filter()

OPの編集に編集:

「配列」とどのように周りにいくつかの基本的な混乱があることが並進こと

オプショナル

 car => map(execute) => map(execute) => transformedcar

ストリーム

[car1, car2, car3]
     => map(execute) => map(execute) => updatedcar1                |  => findFirst (Optional<Car>)
           => map(execute) => map(execute) =>  updatedcar2         |
                 => map(execute) => map(execute) => updatedcar3    |
                                                                collect
                                                 [updatedcar1, updatedcar2, updatedcar3]

findFirstこの方法は、返されますOptionalcollectこの方法は、あなたが/集計/グループにこれらの結果を減らすことができます端末操作を提供します。

これらmapの操作は、「順次」渡された要素を変換します。しかし、Streamあなたは車の多くまたは「一連の」に対処しなければならない適切な例だろう。

再訪するには#2

あなたがオプションで代替手段を提供するオプションがありますorElse(car)

あなたが実行されている副作用の論争する必要がどこしかし、これはあります。

executeメソッドを操作し、それに渡されたのと同じオブジェクトを返している場合、意図しない結果があるでしょう。私は、例えばOptionalsを使用することがありますが、同じでは、Streamsのために適用されます。

private final Car car Optional.of(carWithEngine)
   .map(installSunroof.execute)   // <-- updatedCarWithSunroof
   .map(installDashboard.execute) // <-- updatedCarWithSunroofAndDashboard
   .orElse(carWithEngine)         // <-- updatedCarWithSunroofAndDashboard

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=197679&siteId=1