2021-03-30什么是Stream

流(Stream)中保存对集合或数组数据的操作。和集合类似,但集合中保存的是数据。
Stream特点
1.Stream 自己不会存储元素。
2.Stream不会改变源对象。相反,他们会返回一个持有结果的新Stream。
3.Stream操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。

Stream使用步骤
1.创建 :新建一个Stream
2.中间操作:在一个或多个步骤中,将初始Stream转化到另一个Stream的中间操作。
3.终止操作:使用一个终止操作来产生一个结果。该操作会强制它之前的延迟操作立即执行。在这之后,该Stream就不能使用了。

创建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 规约
        //计算所有员工的工资和
        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);
        }
    }
}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,165评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,503评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,295评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,589评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,439评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,342评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,749评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,397评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,700评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,740评论 2 313
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,523评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,364评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,755评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,024评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,297评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,721评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,918评论 2 336

推荐阅读更多精彩内容