54
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-11-14

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

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


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

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

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

flatMap

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

switchMap

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

concatMap

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

54
33
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
54
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?