java8 Stream 所有函數(shù)demo

所有函數(shù):

allMatch 和 anyMatch

/**
 * allMatch 和 anyMatch
 * 這個并不是過濾數(shù)據(jù)用的凫碌,而只是獲取一個判斷結(jié)果
 *
 * 注意:這個函數(shù)一個Stream只能調(diào)用一次,調(diào)用一次后勋又,這個Stream就調(diào)用close,也就是流就會關(guān)閉了换帜,
 * 如果還要使用赐写,那么需要再開辟一個
 */
@Test
public void allMatchAndAnyMatchTest(){
    List<Integer> integerList = Arrays.asList(1,2,3,123,12,41);
    Stream<Integer> stream = integerList.stream();

    //true
    show(stream.allMatch(t->t>0));

    Stream<Integer> stream1 = integerList.stream();
    //false
    show(stream1.allMatch(t->t>8));

    Stream<Integer> stream3 = integerList.stream();
    //true
    show(stream3.anyMatch(t->t>8));

    Stream<Integer> stream4 = integerList.stream();
    //false
    show(stream4.anyMatch(t->t>400));
}

builder

/**
 * Stream居然還有建造者模式,數(shù)據(jù)是空的
 */
@Test
public void builderTest(){
    Stream<Object> stringStream = Stream.builder().build();
    stringStream.forEach(Out::show);
}

collect

/**
 * collect 這個算是流的終止操作符
 */
@Test
public void collectTest(){
    List<Integer> integerList = Arrays.asList(1,2,3,123,12,41);
    integerList.stream().collect(Collectors.toList()).forEach(Out::show);
}

contact

/**
 * static contact 連接兩個流的操作
 */
@Test
public void contactTest(){
    List<Integer> list = Arrays.asList(1,2,3);
    List<Integer> list2 = Arrays.asList(3,123,12,41);

    Stream.concat(list.stream(), list2.stream()).forEach(Out::show);
}

count

/**
 * count
 */
@Test
public void CountTest(){
    List<Integer> list = Arrays.asList(1,2,3);
    show(list.stream().count());
}

distinct

/**
 * distinct 數(shù)據(jù)流的唯一性
 */
@Test
public void distinctTest(){
    List<Integer> list = Arrays.asList(1,2,3);
    List<Integer> list2 = Arrays.asList(3,123,12,41);

    Stream.concat(list.stream(), list2.stream()).distinct().forEach(Out::show);
}

dropWhile

/**
 * dropWhile
 * 排序后的數(shù)據(jù)流膜赃,這個判斷僅判斷一次,一旦遇到不滿足揉忘,則后面的就不再判斷跳座,和takeWhile相似
 */
@Test
public void dropWhileTest(){
    Stream.of(12,3,4,65,4).sorted(Comparator.reverseOrder()).dropWhile(t->t>5).forEach(Out::show);
}

skip

/**
 * skip 跳過前面多少個元素
 */
@Test
public void skipTest(){
    List<Integer> list = Arrays.asList(1,2,3,123,12,41);
    list.stream().skip(3).forEach(Out::show);
}

limit

/**
 * limit 保留流中的從前往后的多少個元素
 */
@Test
public void limitTest(){
    List<Integer> list = Arrays.asList(1,2,3,123,12,41);
    list.stream().limit(4).forEach(Out::show);
}

empty

/**
 * static empty 返回一個空的集合
 */
@Test
public void emptyTest(){
    Stream.empty().forEach(Out::show);
}

filter

/**
 * filter 過濾對應(yīng)的數(shù)據(jù)
 */
@Test
public void filterTest(){
    List<Integer> list = Arrays.asList(1,2,3,123,12,41);
    list.stream().filter(t->t>10).forEach(Out::show);
}

findAny

/**
 * findAny 主要用于過濾后查找某一個數(shù)據(jù)
 */
@Test
public void findAnyTest(){
    List<Integer> list = Arrays.asList(1,2,3,123,12,41);
    show(list.stream().filter(t->t==14).findAny().orElse(0));
}

findFirst

/**
 * findFirst
 */
@Test
public void findFirstTest(){
    List<Integer> list = Arrays.asList(1,2,3,123,12,41);
    show(list.stream().filter(t->t>14).findFirst().orElse(0));
}

flatMap

/**
 * flatMap 主要用于將List< List< >> 這種多重嵌套轉(zhuǎn)換為一層,跟CompletableFuture.thenCompose比較像
 */
@Test
public void flatMapTest(){
    List<Integer> list1 = Arrays.asList(1,2);
    List<Integer> list2 = Arrays.asList(1,2);
    List<Integer> list3 = Arrays.asList(1,2);

    List<List<Integer>> lists = List.of(list1, list2, list3);
    List<Integer> result = lists.stream().flatMap(Collection::stream).collect(Collectors.toList());
}

forEachOrdered

/**
 * forEachOrdered 查詢數(shù)據(jù)
 * 與forEach 的區(qū)別在于在并行運行的時候泣矛,forEach是并行亂序的疲眷,而forEachOrdered還是有順序的
 */
@Test
public void forEachOrderedTest(){
    List<Integer> list = Arrays.asList(1,2,3,123,12,41);

    list.stream().parallel().forEach(Out::show);
    tab();
    list.stream().parallel().forEachOrdered(Out::show);
}

generate

/**
 * generate 用于生成流數(shù)據(jù)
 * 但是這個函數(shù)生成的數(shù)據(jù)是無限的,因此必須用limit進行限制您朽,該函數(shù)主要用于生成自己的流
 */
@Test
public void generateTest(){
    Random seed = new Random();
    Supplier<Integer> random = seed::nextInt;
    Stream.generate(random).limit(12).forEach(Out::show);

    //函數(shù)會一直執(zhí)行狂丝,直到limit限制,否則會一直阻塞
    Stream.generate(()->23).limit(12).forEach(Out::show);
}

iterate

/**
 * iterate 用于生成流數(shù)據(jù)
 */
@Test
public void iterateTest(){
    //方法1
    Stream.iterate(0, a->a+2).limit(3).forEach(Out::show);

    //方法2
    Stream.iterate(0, r->r<8, a->a+2).limit(7).forEach(Out::show);
}

max

/**
 * max
 */
@Test
public void maxTest(){
    show(Stream.iterate(0, a->a+1).limit(12).max(Comparator.comparingInt(a -> a)).get());
}

noneMatch

/**
 * noneMatch 測試
 */
@Test
public void noneMatchTest(){
    show(Stream.iterate(0, a->a+1).limit(12).noneMatch(a->a>3));
    show(Stream.iterate(0, a->a+1).limit(12).noneMatch(a->a>30));
}

of

/**
 * of 測試
 */
@Test
public void ofTest(){
    Stream.of(12).forEach(Out::show);
    tab();
    Stream.of(12,3,4,65,4).forEach(Out::show);
}

ofNullable

/**
 * ofNullable
 * 與of 區(qū)別在于ofNullable是能夠存放null
 */
@Test
public void ofNullableTest(){
    Stream.ofNullable(12).forEach(Out::show);
    Stream.ofNullable(null).forEach(Out::show);
}

peek

/**
 * peek
 * 這個是返回一個新的流哗总,但是并沒有對流中的數(shù)據(jù)進行操作几颜,和map的區(qū)別在于map會生成一個新的數(shù)據(jù)流
 * peek和foreach的區(qū)別在于peek是中間數(shù)據(jù),而forEach是Stream終結(jié)流函數(shù)
 */
@Test
public void peekTest(){
    Stream.of(12,3,4,65,4)
        .peek(t->{
            show(" - "+t+" - ");
        })
        .filter(t->t>6)
        .peek(t->{
            show(" * "+t+" * ");
        })
        .forEach(Out::show);
}

reduce

/**
 * reduce 用法
 * reduce 這個其實是相當于將那些流全部進行匯總之后進行操作
 */
@Test
public void reduceTest(){
    show(Stream.of(12,3,4,65,4).reduce(1, (a, b)->a+b));
    show(Stream.of(12,3,4,65,4).reduce((a, b)->a+b));
}

sorted

/**
 * sorted
 * 默認升序
 */
@Test
public void sortedTest(){
    Stream.of(12,3,4,65,4).sorted().forEach(Out::show);
    Stream.of(12,3,4,65,4).sorted(Comparator.reverseOrder()).forEach(Out::show);
}

takeWhile

/**
 * takeWhile java9
 * 該函數(shù)用于對排序后的數(shù)據(jù)進行過濾讯屈,從頭排序蛋哭,直到不滿足條件,這個并不是過濾所有的涮母,跟函數(shù)dropWhile
 */
@Test
public void takeWhileTest(){
    Stream.of(12,3,4,65,4).sorted(Comparator.reverseOrder()).takeWhile(t->t>5).forEach(Out::show);
}

toArray

/**
 * toArray
 * 將數(shù)據(jù)流轉(zhuǎn)換為數(shù)組
 */
@Test
public void toArrayTest(){
    //方法1
    Object[] objects = Stream.of(12,3,4,65,4).toArray();
    Arrays.stream(objects).forEach(Out::show);

    //方法2
    Integer[] integers = Stream.of(12,3,4,65,4).toArray(Integer[]::new);
    Arrays.stream(integers).forEach(Out::show);
}

<br />

注意:

1.java9的這個dropWhite函數(shù)和filter函數(shù)有什么區(qū)別

這個函數(shù)需要排序谆趾,排序后,這兩個函數(shù)都是遇到一次不滿足的叛本,則不再向后過濾沪蓬,所以性能稍微會高一點<br />

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市来候,隨后出現(xiàn)的幾起案子跷叉,更是在濱河造成了極大的恐慌,老刑警劉巖吠勘,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件性芬,死亡現(xiàn)場離奇詭異,居然都是意外死亡剧防,警方通過查閱死者的電腦和手機植锉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來峭拘,“玉大人俊庇,你說我怎么就攤上這事狮暑。” “怎么了辉饱?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵搬男,是天一觀的道長。 經(jīng)常有香客問我彭沼,道長缔逛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任姓惑,我火速辦了婚禮褐奴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘于毙。我一直安慰自己敦冬,他們只是感情好,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布唯沮。 她就那樣靜靜地躺著脖旱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪介蛉。 梳的紋絲不亂的頭發(fā)上萌庆,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機與錄音币旧,去河邊找鬼踊兜。 笑死,一個胖子當著我的面吹牛佳恬,可吹牛的內(nèi)容都是我干的捏境。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼毁葱,長吁一口氣:“原來是場噩夢啊……” “哼垫言!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起倾剿,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤筷频,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后前痘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凛捏,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年芹缔,在試婚紗的時候發(fā)現(xiàn)自己被綠了坯癣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡最欠,死狀恐怖示罗,靈堂內(nèi)的尸體忽然破棺而出惩猫,到底是詐尸還是另有隱情,我是刑警寧澤蚜点,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布轧房,位于F島的核電站,受9級特大地震影響绍绘,放射性物質(zhì)發(fā)生泄漏奶镶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一陪拘、第九天 我趴在偏房一處隱蔽的房頂上張望实辑。 院中可真熱鬧,春花似錦藻丢、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至馍佑,卻和暖如春斋否,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拭荤。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工茵臭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人舅世。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓旦委,卻偏偏與公主長得像,于是被迫代替她去往敵國和親雏亚。 傳聞我的和親對象是個殘疾皇子缨硝,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

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