Help us understand the problem. What is going on with this article?

RxJavaのflatMap, switchMap, concatMapを理解する

More than 3 years have passed since last update.

Reactive Frustrationsからの一部引用・翻訳です。

RxJavaのflatMap/switchMap/concatMapを理解する上でとてもわかりやすい喩え話を見つけたので共有します。


RxJavaには膨大な量のメソッド/オペレータがあります。いくつかのオペレータはパッと見同じ動きをしているように見え間違いやすいのですが、実際のところは異なるユースケースを想定して作られています。

flatMap, switchMap, そしてconcatMap。これらの違いを喩え話で説明してみます。

開発者向けのカンファレンスを想像してみてください。そこには一人の司会と、複数の講演者がいます。司会の役割は講演者を紹介してステージに迎えることです。紹介が終わると、講演者はステージに上がり、話し始めます。

flatMap

flatMapの場合、司会は自分がこうと決めたタイミングで講演者をステージに迎えます。つまり、複数の講演者が同時にステージ上でしゃべることがあり得ます。とてもうるさいカンファレンスですね。

switchMap

この場合、司会は少しせっかちです。司会は自分が新しい講演者をステージに迎えようと決めた時、現在ステージに上がっている講演者に話を中断し、ステージを降りるよう求めます。そして司会は次の講演者をステージに迎えます。つまり、一度にしゃべる講演者は一人です。

concatMap

concatMapの場合、司会は公平です。司会は、現在の講演者がしゃべっている間に新しい講演者をステージに上げたくなっても、switchMapの時のようにはしません。たとえ話が長くなったとしても、終わるまで待ちます。そして話が終わった後に、次の講演者をステージに招待します。この場合でも、一度にしゃべる講演者は一人です。

cyberagent
サイバーエージェントは「21世紀を代表する会社を創る」をビジョンに掲げ、インターネットテレビ局「AbemaTV」の運営や国内トップシェアを誇るインターネット広告事業を展開しています。インターネット産業の変化に合わせ新規事業を生み出しながら事業拡大を続けています。
http://www.cyberagent.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away