JAVA8 流 Stream 的使用

JAVA8流的使用

一、篩選和切片

  1. 用謂詞篩選 ==filter(T -> T.getXX())==
  2. 判斷相同 ==distinct()==
  3. 截?cái)嗔? ==limit(n)==
  4. 跳過元素 ==skip(n)==
  5. 排序 ==sorted(Comparator.comparing(T::getXX))==
  6. 遍歷 ==forEach(XXX)==

二、映射

  1. 對流中每一個(gè)元素應(yīng)用函數(shù) ==map()==
    ==> 一般用于提取流中的內(nèi)容 map(T :: getXX)
  2. 流的扁平化 ==flatMap()==
    ==> 將一個(gè)流中每個(gè)值都轉(zhuǎn)換成另外一個(gè)流蝌箍,然后再將轉(zhuǎn)換的所有的流鏈接成一個(gè)流

三袍患、查找與匹配

  1. 查找至少一個(gè)匹配 ==anyMatch()==
  2. 查找是全匹配 ==allMatch()==
    對應(yīng)的無匹配是 ==noneMatch()==
  3. 查找任意元素 ==findAny()==
  4. 查找第一個(gè)元素 ==findFirst()==
  5. 查找最小/最大的
    ==min(Comparator.comparing(T::getXX))==
    ==max(Comparator.comparing(T::getXX))==

四匆篓、歸約

  1. 求和 ==reduce(初始值,Integer :: sum)==
ins2.stream().reduce(0,Integer::sum)

不加初始值 返回Optional類型
  1. 求最大最小 ==reduce(初始值,Integer :: sum)==
ins.stream().reduce(0,Integer::max)
ins.stream().reduce(0,Integer::min)

不加初始值 返回Optional類型

五猛铅、數(shù)值流

五A陆蟆、原始類型流特化
  1. 映射到數(shù)值流
    ==mapToInt(XX :: getX)==
    ==mapToDouble(XX :: getX)==
    ==mapToLong(XX :: getX)==

映射成功后 可以使用sum(),max(),min(),avg() 等方法

  1. 轉(zhuǎn)換為對象流 (類似裝箱)
    ==boxed()==

  2. 默認(rèn)值
    ==OptionalInt==
    ==OptionalDouble==
    ==OptionalLong==

OptionalInt XX =trans.parallelStream().mapToInt(Transaction::getValue).max()
int max = XX.orElse(N)   拖過沒有最大值雷厂,則為默認(rèn)的N
五B、數(shù)值范圍

IntStream和LongStream 有 方法

==range(m,n)==
==rangeClosed(m,n)==
對比是 后者包含n叠殷,前者不包含n

生成勾股數(shù)
Stream<double[]> sqrt = IntStream.rangeClosed(1, 100).boxed()
    .flatMap(a -> IntStream.rangeClosed(a, 100)
            .mapToObj(b -> new double[]{a,b,Math.sqrt(a*a + b*b)})
            .filter(t -> t[2] % 1 == 0));
sqrt.limit(10).forEach(t -> System.out.println((int)t[0] + "," + (int)t[1] + "," + (int)t[2]));

六改鲫、構(gòu)建流

//1.由值創(chuàng)建流
Stream<String> s = Stream.of("1","2","3","6");
Stream<String> s2 = Stream.empty(); //創(chuàng)建空流
s.forEach(System.out::println);

//2.由數(shù)組創(chuàng)建流
int[] nums = { 11,60,61,12,16,20 };
int sum = Arrays.stream(nums).sum();

//3.由文件生成流
long lines = 0;
try (Stream<String> s3 = Files.lines(Paths.get("data.txt"),
        Charset.defaultCharset())) {
    lines = s3.flatMap(line -> Arrays.stream(line.split(""))).distinct().count();
} catch (Exception e) {
}
System.out.println(sum + "::" + lines);

//4.函數(shù)生成流
//4.1 迭代 iterate(n,lambda) 方法接受初始值,并將lambda作用于每個(gè)值
Stream.iterate(0, a -> a+2).limit(10).forEach(System.out::println);
//4.1.1 測試 斐波那契數(shù)列
Stream.iterate(new int[]{0, 1}, t -> new int[]{t[1], t[0]+ t[1]})
        .limit(10).forEach(t -> System.out.print(t[0]+ " "));
Stream.iterate(new int[]{0, 1}, t -> new int[]{t[1], t[0]+ t[1]})
.limit(10).map(t -> t[0] + " ").forEach(System.out::print);

//4.2 生成 generate 接受一個(gè) Supplier<T> 類型 Lambda值
IntStream.generate(new IntSupplier() {
    public int getAsInt(){
        return 2;
    }
});
IntStream.generate(() -> 2).limit(10).forEach(System.out::print);;
//4.2.2 測試 斐波那契數(shù)列
IntStream.generate(new IntSupplier(){           
    private int a = 0;private int b = 1;
    public int getAsInt() {
        int oldPrevious = a;
        int nextValue = a + b;
        a = b;
        b = nextValue;
        return oldPrevious;}
    }).limit(10).forEach(System.out::println);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末林束,一起剝皮案震驚了整個(gè)濱河市像棘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌诊县,老刑警劉巖讲弄,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件措左,死亡現(xiàn)場離奇詭異依痊,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)怎披,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門胸嘁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人凉逛,你說我怎么就攤上這事性宏。” “怎么了状飞?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵毫胜,是天一觀的道長。 經(jīng)常有香客問我诬辈,道長酵使,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任焙糟,我火速辦了婚禮口渔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘穿撮。我一直安慰自己缺脉,他們只是感情好痪欲,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著攻礼,像睡著了一般业踢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上礁扮,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天陨亡,我揣著相機(jī)與錄音,去河邊找鬼深员。 笑死负蠕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的倦畅。 我是一名探鬼主播遮糖,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼叠赐!你這毒婦竟也來了欲账?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤芭概,失蹤者是張志新(化名)和其女友劉穎赛不,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體罢洲,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡踢故,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惹苗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片殿较。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖桩蓉,靈堂內(nèi)的尸體忽然破棺而出淋纲,到底是詐尸還是另有隱情,我是刑警寧澤院究,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布洽瞬,位于F島的核電站,受9級特大地震影響业汰,放射性物質(zhì)發(fā)生泄漏伙窃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一蔬胯、第九天 我趴在偏房一處隱蔽的房頂上張望对供。 院中可真熱鬧,春花似錦、人聲如沸产场。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽京景。三九已至窿冯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間确徙,已是汗流浹背醒串。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鄙皇,地道東北人芜赌。 一個(gè)月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像伴逸,于是被迫代替她去往敵國和親缠沈。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

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

  • Java8 in action 沒有共享的可變數(shù)據(jù)错蝴,將方法和函數(shù)即代碼傳遞給其他方法的能力就是我們平常所說的函數(shù)式...
    鐵牛很鐵閱讀 1,230評論 1 2
  • 第一章 為什么要關(guān)心Java 8 使用Stream庫來選擇最佳低級執(zhí)行機(jī)制可以避免使用Synchronized(同...
    謝隨安閱讀 1,491評論 0 4
  • 概要 流讓你從外部迭代轉(zhuǎn)向內(nèi)部迭代洲愤。這樣,你就用不著寫下面這樣的代碼來顯式地管理數(shù)據(jù)集合的迭代(外部迭代)了: 現(xiàn)...
    潯它芉咟渡閱讀 1,501評論 1 2
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)顷锰。 張土汪:刷leetcod...
    土汪閱讀 12,745評論 0 33
  • 提示內(nèi)用的框比較傻比較愣
    bingling823閱讀 200評論 0 1