reactor3 flux 的使用

reactor 本質(zhì)上是觀察者模式的使用
添加數(shù)據(jù)

 List<String> list = new ArrayList<>();
 list.add("1");
 list.add("2");
 list.add("3");
 list.add("4");
 list.add("5");
// 添加數(shù)據(jù) 通過(guò)流的方式
Flux.fromStream(list.stream());
// 只包含當(dāng)前的數(shù)據(jù)流 
Flux.just("1","2");
// 空的數(shù)據(jù)流
Flux.empty();
// 手動(dòng)添加數(shù)據(jù)流
Flux.create((i) -> {
       i.next("1");
       i.next("2");
       i.next("3");
       i.next("4");
   });
// 添加數(shù)據(jù)通過(guò)集合的方式
Flux.fromIterable(list);
//   定時(shí)產(chǎn)生一個(gè)數(shù)據(jù)哮塞,當(dāng)前方式是每
Flux.interval(Duration.ofMillis(100))轩勘;

消費(fèi)數(shù)據(jù) subscribe方法

Flux flux =  Flux.create((i) -> {
            i.next("1");
            i.next("2");
            i.next("3");
            i.next("4");
        });
// 消費(fèi)數(shù)據(jù)
flux.subscribe((s) -> {
             System.out.println(s);
   });
flux.subscribe(System.out::println)

flux.subscribe(new Consumer<String>() {
            @Override
            public void accept(String s) {
                // System.out.println(s);
            }
        });

輸出結(jié)果
16:37:50.894 [main] DEBUG reactor.util.Loggers$LoggerFactory - Using Slf4j logging framework
1
2
3
4

Process finished with exit code 0


數(shù)據(jù)中間處理環(huán)節(jié) do 系列接口

List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
// 添加數(shù)據(jù)源
Flux.fromIterable(list)
// 每處里一個(gè)數(shù)據(jù)前 就會(huì)執(zhí)行該方法
.doOnNext((n) -> {
            //System.out.println("next");
        })
// 執(zhí)行完數(shù)據(jù)流執(zhí)行該方法
.doFinally((f) -> {
           // System.out.println("finally");
        })
// 每處里一個(gè)數(shù)據(jù)前就會(huì)執(zhí)行該方法
.doOnEach((e) -> {
            //System.out.println("each");
        })
//執(zhí)行結(jié)束之后輸出
.doOnComplete(()->{
            System.out.println("complete");
        })
.subscribe((System.out::println));

執(zhí)行結(jié)果
17:00:42.399 [main] DEBUG reactor.util.Loggers$LoggerFactory - Using Slf4j logging framework
next
each
1
next
each
2
next
each
3
next
each
4
next
each
5
each
complete
finally

Process finished with exit code 0

buffer 的使用

//buffer 可以將一個(gè)長(zhǎng)數(shù)據(jù)流切割為想要長(zhǎng)度的數(shù)據(jù)流 用途比如需要保存大量的數(shù)據(jù)的時(shí)候可以用這個(gè)方法
//對(duì)數(shù)據(jù)切割羹应,分段保存
Flux.interval(Duration.ofMillis(10)).buffer(10).subscribe(System.out::println);
        Thread.sleep(100000L);

輸出結(jié)果
18:12:44.159 [main] DEBUG reactor.util.Loggers$LoggerFactory - Using Slf4j logging framework
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
[20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
[30, 31, 32, 33, 34, 35, 36, 37, 38, 39]
[40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
[50, 51, 52, 53, 54, 55, 56, 57, 58, 59]

flatmap, map 的區(qū)別
先看下圖


image.png

返回的不一樣
flatMap必須返回的是個(gè)publisher 而map 返回的是一個(gè)對(duì)象 這個(gè)對(duì)象既可以是item 也可以是封裝為Flux 倚评,Mono

        List<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        list.add("5");
        Flux.fromIterable(list).flatMap(s -> {
            return Mono.just(s);
        });
        Flux.fromIterable(list).flatMap(s -> {
            return Flux.just(s);
        });
        Flux.fromIterable(list).map(s -> {
            return Flux.just(s);
        });
        Flux.fromIterable(list).map(s -> {
            return Mono.just(s);
        });
        Flux.fromIterable(list).map(s -> {
            return s;
        });
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末丘逸,一起剝皮案震驚了整個(gè)濱河市单鹿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌深纲,老刑警劉巖仲锄,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異湃鹊,居然都是意外死亡儒喊,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)币呵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)怀愧,“玉大人,你說(shuō)我怎么就攤上這事余赢⌒疽澹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵没佑,是天一觀的道長(zhǎng)毕贼。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蛤奢,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任陶贼,我火速辦了婚禮啤贩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拜秧。我一直安慰自己痹屹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布枉氮。 她就那樣靜靜地躺著志衍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪聊替。 梳的紋絲不亂的頭發(fā)上楼肪,一...
    開(kāi)封第一講書(shū)人閱讀 51,578評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音惹悄,去河邊找鬼春叫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的暂殖。 我是一名探鬼主播价匠,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼呛每!你這毒婦竟也來(lái)了踩窖?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤晨横,失蹤者是張志新(化名)和其女友劉穎洋腮,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體颓遏,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡徐矩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了叁幢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滤灯。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖曼玩,靈堂內(nèi)的尸體忽然破棺而出鳞骤,到底是詐尸還是另有隱情,我是刑警寧澤黍判,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布豫尽,位于F島的核電站,受9級(jí)特大地震影響顷帖,放射性物質(zhì)發(fā)生泄漏美旧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一贬墩、第九天 我趴在偏房一處隱蔽的房頂上張望榴嗅。 院中可真熱鬧,春花似錦陶舞、人聲如沸嗽测。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)唠粥。三九已至,卻和暖如春停做,著一層夾襖步出監(jiān)牢的瞬間晤愧,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工雅宾, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留养涮,地道東北人葵硕。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像贯吓,于是被迫代替她去往敵國(guó)和親懈凹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 相關(guān)概念 Android多線程編程的原則: 不要阻塞UI線程; 不要在UI線程之外訪問(wèn)UI組件; Reactive...
    今陽(yáng)說(shuō)閱讀 520評(píng)論 0 1
  • 簡(jiǎn)介 今天我們要介紹的是Reactor中的多線程模型和定時(shí)器模型,Reactor之前我們已經(jīng)介紹過(guò)了悄谐,它實(shí)際上是觀...
    flydean程序那些事閱讀 697評(píng)論 0 0
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理介评,服務(wù)發(fā)現(xiàn),斷路器爬舰,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • Spring5現(xiàn)處在第四個(gè)預(yù)發(fā)布版们陆,正式版將要發(fā)布了,它帶來(lái)的一大特性就是響應(yīng)式框架Spring WebFlux情屹。...
    MrTT閱讀 26,477評(píng)論 0 21
  • 為了應(yīng)對(duì)高并發(fā)的服務(wù)器端開(kāi)發(fā)坪仇,微軟在2009年提出了一種更優(yōu)雅地實(shí)現(xiàn)異步編程的方式Reactive Program...
    JunChow520閱讀 24,969評(píng)論 7 47