※Reactive Frustrationsからの一部引用・翻訳です。
RxJavaのflatMap/switchMap/concatMapを理解する上でとてもわかりやすい喩え話を見つけたので共有します。
RxJavaには膨大な量のメソッド/オペレータがあります。いくつかのオペレータはパッと見同じ動きをしているように見え間違いやすいのですが、実際のところは異なるユースケースを想定して作られています。
flatMap
, switchMap
, そしてconcatMap
。これらの違いを喩え話で説明してみます。
開発者向けのカンファレンスを想像してみてください。そこには一人の司会と、複数の講演者がいます。司会の役割は講演者を紹介してステージに迎えることです。紹介が終わると、講演者はステージに上がり、話し始めます。
flatMap
flatMap
の場合、司会は自分がこうと決めたタイミングで講演者をステージに迎えます。つまり、複数の講演者が同時にステージ上でしゃべることがあり得ます。とてもうるさいカンファレンスですね。
switchMap
この場合、司会は少しせっかちです。司会は自分が新しい講演者をステージに迎えようと決めた時、現在ステージに上がっている講演者に話を中断し、ステージを降りるよう求めます。そして司会は次の講演者をステージに迎えます。つまり、一度にしゃべる講演者は一人です。
concatMap
concatMap
の場合、司会は公平です。司会は、現在の講演者がしゃべっている間に新しい講演者をステージに上げたくなっても、switchMap
の時のようにはしません。たとえ話が長くなったとしても、終わるまで待ちます。そして話が終わった後に、次の講演者をステージに招待します。この場合でも、一度にしゃべる講演者は一人です。