RxJava操作符(八)Aggregate
RxJava操作符(八)Aggregate
在这篇文章里我们来了解一下Rxjava的聚合操作符。一、Contact
Contact操作符将多个Observable结合成一个Observable并发射数据,并且严格按照先后顺序发射数据,前一个Observable的数据没有发射完,是不能发射后面Observable的数据的。
有两个操作符跟它类似,但是有区别,分别是
1.startWith:仅仅是在前面插上一个数据。
2.merge:其发射的数据是无序的。
二、Count
Count操作符用来统计源Observable发射了多少个数据,最后将数目给发射出来;如果源Observable发射错误,则会将错误直接报出来;在源Observable没有终止前,count是不会发射统计数据的。
下面使用Contact和Count操作符来结合多个Observable和统计发射数据的数目
<ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>private Observable<Integer> contactObserver() {<br /></li><li>Observable<Integer> obser1 = Observable.just(1, 2, 3);<br /></li><li>Observable<Integer> obser2 = Observable.just(4, 5, 6);<br /></li><li>Observable<Integer> obser3 = Observable.just(7, 8, 9);<br /></li><li>return Observable.concat(obser1, obser2, obser3);<br /></li><li>}<br /></li><li>private Observable<Integer> conuntObserver() {<br /></li><li>return Observable.just(1, 2, 3).count();<br /></li><li>}</li></ol>
<ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>mLButton.setText("contact");<br /></li><li>mLButton.setOnClickListener(e -> contactObserver().subscribe(i -> log("contact:" + i)));<br /></li><li>mRButton.setText("conunt");<br /></li><li>mRButton.setOnClickListener(e -> conuntObserver().subscribe(i -> log("conunt:" + i)));</li></ol>
三、Reduce、Collect
Reduce操作符应用一个函数接收Observable发射的数据和函数的计算结果作为下次计算的参数,输出最后的结果。跟前面我们了解过的scan操作符很类似,只是scan会输出每次计算的结果,而reduce只会输出最后的结果。
Collect操作符类似于Reduce,但是其目的不同,collect用来将源Observable发射的数据给收集到一个数据结构里面,需要使用两个参数:
1.一个产生收集数据结构的函数。
2.一个接收第一个函数产生的数据结构和源Observable发射的数据作为参数的函数。
下面我们来使用一下reduce和collect操作符。同当初scan的例子一样,我们使用一个装了10个数字2的list创建源Observable。
<ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>private Observable<Integer> reduceObserver() {<br /></li><li>return Observable.from(list).reduce((x, y) -> x * y);<br /></li><li>}<br /></li><li>private Observable<ArrayList<Integer>> collectObserver() {<br /></li><li>return Observable.from(list).collect(() -> new ArrayList<>(), (integers, integer) -> integers.add(integer));<br /></li><li>}</li></ol>
<ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>mLButton.setText("reduce");<br /></li><li>mLButton.setOnClickListener(e -> reduceObserver().subscribe(i -> log("reduce:" + i)));<br /></li><li>mRButton.setText("collect");<br /></li><li>mRButton.setOnClickListener(e -> collectObserver().subscribe(i -> log("collect:" + i)));</li></ol>
聚合操作符比较少,就到这里了,本文中的源代码见https://github.com/Chaoba/RxJavaDemo

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









ここ数日、Ice Universeは、サムスンの次期主力スマートフォンであると広く信じられているGalaxy S25 Ultraの詳細を着実に明らかにしている。とりわけ、リーカーはサムスンがカメラのアップグレードを1つだけ計画していると主張した

OnLeaks は、X (旧 Twitter) のフォロワーから 4,000 ドル以上を集めようとして失敗した数日後、Android Headlines と提携して Galaxy S25 Ultra のファーストルックを提供しました。コンテキストとして、h の下に埋め込まれたレンダリング イメージ

TCLは、2つの新しいスマートフォンの発表に加えて、NXTPAPER 14と呼ばれる新しいAndroidタブレットも発表しました。その巨大な画面サイズはセールスポイントの1つです。 NXTPAPER 14 は、TCL の代表的なブランドであるマット LCD パネルのバージョン 3.0 を搭載しています。

Vivo Y300 Pro は完全に公開されたばかりで、大容量バッテリーを備えた最もスリムなミッドレンジ Android スマートフォンの 1 つです。正確に言うと、このスマートフォンの厚さはわずか 7.69 mm ですが、6,500 mAh のバッテリーを搭載しています。これは最近発売されたものと同じ容量です

サムスンは、ファンエディション(FE)スマートフォンシリーズをいつアップデートするかについて、まだ何のヒントも提供していない。現時点では、Galaxy S23 FE は 2023 年 10 月初めに発表された同社の最新版のままです。

ここ数日、Ice Universeは、サムスンの次期主力スマートフォンであると広く信じられているGalaxy S25 Ultraの詳細を着実に明らかにしている。とりわけ、リーカーはサムスンがカメラのアップグレードを1つだけ計画していると主張した

Redmi Note 14 Pro Plusは、昨年のRedmi Note 13 Pro Plus(Amazonで現在375ドル)の直接の後継者として正式に発表されました。予想通り、Redmi Note 14 Pro Plusは、Redmi Note 14およびRedmi Note 14 Proと並んでRedmi Note 14シリーズをリードします。李

OnePlus の姉妹ブランドである iQOO の製品サイクルは 2023 年から 4 年で、ほぼ終わりに近づいている可能性があります。それにもかかわらず、ブランドはまだZ9シリーズの開発を終えていないと宣言しました。その最終、そしておそらく最高エンドとなる Turbo+ バリアントが、予測どおりに発表されました。 T
