2021-06-08 java8 Stream 工作中一些可能用到的總結(jié)

package com.example.jsch_smb;

import cn.hutool.core.collection.CollUtil;

import cn.hutool.core.map.MapUtil;

import java.util.*;

import java.util.stream.Collectors;

import java.util.stream.Stream;

public class Java8StreamDemo {

//并行流 parallelStream forEachOrdered

? ? private void parallelStream() {

List nums = CollUtil.newArrayList(1, 2, 3, 4, 5);

? ? ? ? //順序打印

? ? ? ? nums.stream().forEach(System.out::print);

? ? ? ? nums.stream().forEachOrdered(System.out::print);

? ? ? ? //并行流

? ? ? ? nums.parallelStream().forEach(System.out::print);

? ? ? ? nums.parallelStream().forEachOrdered(System.out::print);

? ? }

//流連接 flatMap

? ? private void flatMap() {

List list = Arrays.asList("a,b,c", "1,2,3");

? ? ? ? List newList = list.stream().flatMap(s -> {

//將每個(gè)元素轉(zhuǎn)換成一個(gè)stream

? ? ? ? ? ? String[] split = s.split(",");

? ? ? ? ? ? Stream s2 = Arrays.stream(split);

? ? ? ? ? ? return s2;

? ? ? ? }).collect(Collectors.toList());

? ? ? ? newList.forEach(System.out::println); // a b c 1 2 3

? ? }

//分組排序 Comparator.comparing Comparator.naturalOrder Collectors.partitioningBy

? ? private void groupAndSort() {

Student s1 =new Student("aa", 10);

? ? ? ? Student s2 =new Student("bb", 20);

? ? ? ? Student s3 =new Student("aa",30);

? ? ? ? Student s4 =new Student("dd", 40);

? ? ? ? List students = CollUtil.newArrayList(s1, s2, s3, s4);

? ? ? ? //二次排序

? ? ? ? students.stream().sorted(

Comparator.comparing(Student::getName,Comparator.naturalOrder())

.thenComparing(Student::getAge,Comparator.reverseOrder())).collect(Collectors.toList());

? ? ? ? //一次分組 分成兩部分,一部分大于10歲伦腐,一部分小于等于10歲

? ? ? ? Map>> collect2 = students.stream().collect(

Collectors.partitioningBy(e -> e.getAge() >10, Collectors.groupingBy(Student::getName)));

? ? ? ? //二次分組? 先第一個(gè)提交 在第二個(gè)條件

? ? ? ? Map>> collect3 = students.stream().collect(

Collectors.partitioningBy(e -> e.getAge() >10, Collectors.groupingBy(k -> {

if (k.getAge() ==30) {

return "equal";

? ? ? ? ? ? ? ? ? ? }else {

return "unequal";

? ? ? ? ? ? ? ? ? ? }

})));

? ? ? ? //分組統(tǒng)計(jì)

? ? ? ? LinkedHashMap collect = students.stream().collect(

Collectors.groupingBy(Student::getName, LinkedHashMap::new, Collectors.counting()));

? ? ? ? //分組取最大值

? ? ? ? Map collect1 = students.stream().collect(

Collectors.groupingBy(Student::getName, Collectors.collectingAndThen(

Collectors.maxBy(Comparator.comparingInt(Student::getAge)), Optional::get)));

? ? }

//匹配,聚合

? ? private void match() {

List list = Arrays.asList(1, 2, 3, 4, 5);

? ? ? ? boolean allMatch = list.stream().allMatch(e -> e >10); //false

? ? ? ? boolean noneMatch = list.stream().noneMatch(e -> e >10); //true

? ? ? ? boolean anyMatch = list.stream().anyMatch(e -> e >4); //true

? ? ? ? Integer findFirst = list.stream().findFirst().get(); //1

? ? ? ? Integer findAny = list.stream().findAny().get(); //1

? ? ? ? long count = list.stream().count(); //5

? ? ? ? Integer max = list.stream().max(Integer::compareTo).get(); //5

? ? ? ? Integer min = list.stream().min(Integer::compareTo).get(); //1

? ? }

//積累

? ? private void experience() {

Student s1 =new Student("aa", 10);

? ? ? ? Student s2 =new Student("bb", 20);

? ? ? ? Student s3 =new Student("aa", 30);

? ? ? ? Student s4 =new Student("dd", 40);

? ? ? ? List students = CollUtil.newArrayList(s1, s2, s3, s4);

? ? ? ? // 1. 取max 值

//List

? ? ? ? IntSummaryStatistics collect = CollUtil.newArrayList(1, 2, 3, 4, 5).stream().collect(Collectors.summarizingInt(Integer::intValue));

? ? ? ? //IntSummaryStatistics{count=5, sum=15, min=1, average=3.000000, max=5}

// List

? ? ? ? students.stream().collect(Collectors.summarizingInt(Student::getAge)).getMax();

? ? ? ? // List

? ? ? ? List maps = CollUtil.newArrayList();

? ? ? ? students.parallelStream().forEach(e -> {

maps.add(MapUtil.of(e.getName(), e.getAge()));

? ? ? ? });

? ? ? ? maps.stream().mapToInt(

m -> m.get("age") !=null ? Integer.parseInt(m.get("age").toString()) :0

? ? ? ? ).max().getAsInt();

? ? ? ? // 2. 取總值 等聚合值 sum average ...

// List<對(duì)象>

? ? ? ? students.stream().mapToInt(n -> n.getAge()).summaryStatistics().getSum();

? ? ? ? // List

? ? ? ? int sum = maps.stream().mapToInt(

m -> m.get("age") !=null ? Integer.parseInt(m.get("age").toString()) :0

? ? ? ? ).sum();

? ? }

public static void main(String[] args) {

Java8StreamDemo demo =new Java8StreamDemo();

? ? ? ? demo.groupAndSort();

? ? }

static class Student {

private Stringname;

? ? ? ? private int age;

? ? ? ? public Student(String name, int age) {

this.name = name;

? ? ? ? ? ? this.age = age;

? ? ? ? }

public StringgetName() {

return name;

? ? ? ? }

public void setName(String name) {

this.name = name;

? ? ? ? }

public int getAge() {

return age;

? ? ? ? }

public void setAge(int age) {

this.age = age;

? ? ? ? }

}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末速警,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子侮措,更是在濱河造成了極大的恐慌规伐,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件最冰,死亡現(xiàn)場(chǎng)離奇詭異瘦棋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)锌奴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門兽狭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人鹿蜀,你說(shuō)我怎么就攤上這事箕慧。” “怎么了茴恰?”我有些...
    開封第一講書人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵颠焦,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我往枣,道長(zhǎng)伐庭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任分冈,我火速辦了婚禮圾另,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘雕沉。我一直安慰自己集乔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開白布坡椒。 她就那樣靜靜地躺著扰路,像睡著了一般。 火紅的嫁衣襯著肌膚如雪倔叼。 梳的紋絲不亂的頭發(fā)上汗唱,一...
    開封第一講書人閱讀 49,842評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音丈攒,去河邊找鬼哩罪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛巡验,可吹牛的內(nèi)容都是我干的识椰。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼深碱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了藏畅?” 一聲冷哼從身側(cè)響起敷硅,我...
    開封第一講書人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤功咒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后绞蹦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體力奋,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年幽七,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了景殷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡澡屡,死狀恐怖猿挚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情驶鹉,我是刑警寧澤绩蜻,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站室埋,受9級(jí)特大地震影響办绝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜姚淆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一孕蝉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧腌逢,春花似錦降淮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至窍蓝,卻和暖如春腋颠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吓笙。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工淑玫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人面睛。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓絮蒿,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親叁鉴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子土涝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

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

  • 一、概述 Stream 是 Java8 中處理集合的關(guān)鍵抽象概念幌墓,它可以指定你希望對(duì)集合進(jìn)行的操作但壮,可以執(zhí)行非常復(fù)...
    叢林胖虎閱讀 349評(píng)論 0 0
  • 因?yàn)閷W(xué)習(xí)了Lambda表達(dá)式冀泻,再學(xué)習(xí)Java8新特性之Stream的API常用函數(shù)使用及說(shuō)明,兩者結(jié)合起來(lái)蜡饵,代碼就...
    安仔夏天勤奮閱讀 787評(píng)論 0 0
  • JAVA8新特性 速度更快 Lambda表達(dá)式 Stream API 便于并行 最大化的減少空指針異常 速度更快 ...
    Levi_wen閱讀 185評(píng)論 0 0
  • 表情是什么弹渔,我認(rèn)為表情就是表現(xiàn)出來(lái)的情緒。表情可以傳達(dá)很多信息溯祸。高興了當(dāng)然就笑了肢专,難過就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 124,468評(píng)論 2 7
  • 16宿命:用概率思維提高你的勝算 以前的我是風(fēng)險(xiǎn)厭惡者焦辅,不喜歡去冒險(xiǎn)博杖,但是人生放棄了冒險(xiǎn),也就放棄了無(wú)數(shù)的可能氨鹏。 ...
    yichen大刀閱讀 6,041評(píng)論 0 4