2021-03-30什么是Stream

流(Stream)中保存對集合或數(shù)組數(shù)據(jù)的操作。和集合類似矫夯,但集合中保存的是數(shù)據(jù)。
Stream特點
1.Stream 自己不會存儲元素兼砖。
2.Stream不會改變源對象。相反,他們會返回一個持有結果的新Stream掖鱼。
3.Stream操作是延遲執(zhí)行的然走。這意味著他們會等到需要結果的時候才執(zhí)行。

Stream使用步驟
1.創(chuàng)建 :新建一個Stream
2.中間操作:在一個或多個步驟中戏挡,將初始Stream轉化到另一個Stream的中間操作芍瑞。
3.終止操作:使用一個終止操作來產(chǎn)生一個結果。該操作會強制它之前的延遲操作立即執(zhí)行褐墅。在這之后拆檬,該Stream就不能使用了。

創(chuàng)建Stream
1.通過Collection對象的stream()或parallelStream()方法妥凳。
2.通過Arrays類的stream()方法
3.通過Stream接口的of()竟贯、iterate()、generate()方法逝钥。
4.用過IntStream屑那、Long Stream、DoubleStream接口中的of艘款、range持际、rangeClosed方法。

package text;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;
import java.util.stream.IntStream;
import java.util.stream.Stream;

/**
 * Stream的使用
 * @author zdf
 */
public class Demo5Stream {
    public static void main(String[] args) {
        //1.通過Collection對象的stream()或parallelStream()方法哗咆。
        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add("huawei");
        arrayList.add("xiaomi");
        arrayList.add("pingguo");
        Stream<String> stream = arrayList.stream();
        //遍歷
//        stream.forEach(s-> System.out.println(s));
        stream.forEach(System.out::println);
//       2.Arrays工具類的Stream方法
        String[] arr={"aaa","bbb","ccc"};
        Stream<String> stream1 = Arrays.stream(arr);
        stream1.forEach(System.out::println);
//        3.Stream接口中的of,iterate,generate方法
        Stream<Integer> of = Stream.of(10,20,30,40);
        of.forEach(System.out::println);
        //迭代流
        Stream<Integer> iterate = Stream.iterate(0, x -> x + 2);
        iterate.limit(10).forEach(System.out::println);
//        生成流
        Stream<Integer> generate = Stream.generate(() -> new Random().nextInt(100));
        generate.limit(10).forEach(System.out::println);
//    4IntStream,LongStream,DoubleStream 的of,range,rangeClosed
        IntStream intStream = IntStream.of(100, 200, 300);
        intStream.forEach(System.out::println);
    }
}

中間操作蜘欲、終止操作
中間操作
1.filter、limit晌柬、skip姥份、distinct、sorted
2.map
3.parallel q

package text;

import java.util.ArrayList;
import java.util.Comparator;

public class Demo6 {
    public static void main(String[] args) {
        ArrayList<Employee> list = new ArrayList<>();
        list.add(new Employee("小王", (double) 15000));
        list.add(new Employee("小李", (double) 20000));
        list.add(new Employee("小張", (double) 18000));
        list.add(new Employee("小孫", (double) 12000));
        list.add(new Employee("小孫", (double) 12000));
//    中間操作1.filter 過濾 2.limit 限制 3. skip 跳過 4.distinct 去重 5. sorted 排序
        //filter 過濾
        list.stream().filter(e->e.getMoney()>(double)15000).forEach(System.out::println);
    //limit 限制
        list.stream().limit(2).forEach(System.out::println);
    //skip跳過
        list.stream().skip(2).forEach(System.out::println);
//        distinct 去重復
        list.stream().distinct().forEach(System.out::println);
//    sorted 排序
        list.stream().sorted(Comparator.comparingDouble(Employee::getMoney)).forEach(System.out::println);
//   中間操作2map
        list.stream().map(e->e.getName()).forEach(System.out::println);
//        中間操作3 parallel 采用多線程效率
        list.parallelStream().forEach(System.out::println);
    }
}

終止操作
1.foreach年碘、 min澈歉、max、count
2.reduce屿衅、collect

package text;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

public class Demo8 {
    public static void main(String[] args) {
        ArrayList<Employee> list = new ArrayList<>();
        list.add(new Employee("小王", (double) 15000));
        list.add(new Employee("小李", (double) 20000));
        list.add(new Employee("小張", (double) 18000));
        list.add(new Employee("小孫", (double) 12000));
        list.add(new Employee("小孫", (double) 12000));
        //終止操作 foreach
    list.stream().filter(e->e.getMoney()>15000).forEach(System.out::println);
    //終止操作 min max count
        Optional<Employee> min = list.stream().min(Comparator.comparingDouble(Employee::getMoney));
        System.out.println(min.get());
        //終止操作reduce 規(guī)約
        //計算所有員工的工資和
        Optional<Double> reduce = list.stream().map(Employee::getMoney).reduce((x, y) -> x + y);
        System.out.println(reduce.get());
        //終止方法collect收集
        //獲取所有員工姓名埃难,封裝一個list集合
        List<String> collect = list.stream().map(Employee::getName).collect(Collectors.toList());
        for (String string : collect){
            System.out.println(string);
        }
    }
}

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市傲诵,隨后出現(xiàn)的幾起案子凯砍,更是在濱河造成了極大的恐慌箱硕,老刑警劉巖拴竹,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異剧罩,居然都是意外死亡栓拜,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來幕与,“玉大人挑势,你說我怎么就攤上這事±裁” “怎么了潮饱?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長诫给。 經(jīng)常有香客問我香拉,道長,這世上最難降的妖魔是什么中狂? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任凫碌,我火速辦了婚禮,結果婚禮上胃榕,老公的妹妹穿的比我還像新娘盛险。我一直安慰自己,他們只是感情好勋又,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布苦掘。 她就那樣靜靜地躺著,像睡著了一般赐写。 火紅的嫁衣襯著肌膚如雪鸟蜡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天挺邀,我揣著相機與錄音揉忘,去河邊找鬼。 笑死端铛,一個胖子當著我的面吹牛泣矛,可吹牛的內容都是我干的。 我是一名探鬼主播禾蚕,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼您朽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了换淆?” 一聲冷哼從身側響起哗总,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎倍试,沒想到半個月后讯屈,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡县习,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年涮母,在試婚紗的時候發(fā)現(xiàn)自己被綠了谆趾。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡叛本,死狀恐怖沪蓬,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情来候,我是刑警寧澤跷叉,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站营搅,受9級特大地震影響性芬,放射性物質發(fā)生泄漏。R本人自食惡果不足惜剧防,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一植锉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧峭拘,春花似錦俊庇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至拣展,卻和暖如春彭沼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背备埃。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工姓惑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人按脚。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓于毙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親辅搬。 傳聞我的和親對象是個殘疾皇子唯沮,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內容

  • 1、什么是Stream Java 8之前的集合類庫主要依賴于 外部迭代(external iteration)堪遂。 ...
    冰河winner閱讀 559評論 0 0
  • 前言 這篇文章的主題是探究 Java 8 Stream的內容介蛉,雖然現(xiàn)在Java 14 都發(fā)布了,但是目前企業(yè)用得最...
    眉目清俊閱讀 350評論 0 0
  • 1. Stream概述溶褪? JDK文檔: A sequence of elements supporting seq...
    TheLudlows_閱讀 2,109評論 0 2
  • 簡介 在Java 8中API添加了一個新的抽象稱為流Stream币旧,可以讓你以一種聲明的方式處理數(shù)據(jù)。在Java中只...
    eirunye閱讀 2,506評論 0 5
  • 1.什么是stream 2.stream的三個步驟 3.stream的創(chuàng)建 4.stream的中間操作 5.str...
    torres2019閱讀 385評論 0 0