講義ではかなり説明されています。
Iterable
とObservable
の両方のマップが同じであれば、同じ機能を使用して各要素を単純に変更します。
List(1, 2, 3) map (_ + 1)
利回りList(1, 2, 3)
それはソースObservable
が値を生成するだけでいつでも、順序を変更するにはObservable
にマップするために意味をなさないだろう、1は、元の値を生成するが、特定の目的球でそれに適用されるマッピングされました。注文は保存されます。
しかし、flatMap
は関数A => Observable[A]
を受け取りますので、各要素に対して別のObservable
を作成します。
あなたはそれらCONCAT、その機能が
List(List(2, 3, 4), List(11, 12, 13), List(101, 102, 103))
をもたらすであろうかのように
List(2, 3, 4, 11, 12, 13, 101, 102, 103)
は、あなたがそれについて考えることができるもたらすとwhould
List(1, 10, 100).flatMap(n => List(n + 1, n + 2, n + 3))
可能性がありList
のために持っているだろうかそれら(リストを平らにする)。
Observables
について同じことを行う場合は、各要素について、値を非同期的に作成するObservable
が返されます。表示されるタイミングはわかりません。
Observable(2, 3, 4), Observable(11, 12, 13), Observable(101, 102, 103)
、それらがマージされたときに要素の順序がどうなるか分からない4および102は前になる前に、あなたは唯一の3が来ることを確認することができます:だから、基本的に、あなたは3つの観測を持っているでしょう103となりますが、11または2で始まるか101で始まるかは関係ありません。
flatMap
のIterables
は、Observables
とは異なる動作をします。 Observables
の場合はIterables
オーダーで決定されますが、エレメントの順序はどのようになることはできません。これが最後の緑の大理石の前に来た絵は青marbelsの
一つを示したまさにです。 Iterables
の場合はそうではありませんが、赤色2色、緑色2色、青色2色の順になります。
「同じ」で意味することを詳しく説明できますか?彼らのモナドタイプは同じですが、実際の動作は明らかに異なります(異なる動作をするため)。 – Bergi
「同じ」によって、私は両方のケースで結果が非同期で来るため、注文できないことを意味しました。 – octavian
フラットマップは約**連鎖**オブザーバブルです。 map()はobservableの** result type **を変更することです。 –