愛在花開的季節 发表于 2023-5-22 21:46:39

Stream流体系

视频地址https://www.bilibili.com/video/BV1Cv411372m?

1 Stream流概述


[*]目的:简化集合和数组操作的API,结合了Lambda表达式。
[*]Stream流式思想的核心:

[*]先得到集合或者数组的Stream流(就是一根传送带)
[*]把元素放上去
[*]用这个Stream流简化的API来方便的操作元素

2 Stream流获取


[*]Stream流的三类方法:


[*]获取Stream流

[*]创建一条流水线,并把数据放到流水线上准备进行操作。

[*]中间方法

[*]流水线上的操作。一次操作完毕之后,还可以继续进行其他操作。

[*]终结方法

[*]一个Stream流只能有一个终结方法,是流水线上的最后一个操作。


[*]Stream操作集合或者数组的第一步是先得到Stream流,然后才能使用流的功能。


[*]集合获取Stream流的方式
使用Collection接口中的默认方法stream()生成流
https://img2023.cnblogs.com/blog/3153256/202305/3153256-20230521101646192-599367687.png
        /***Collection集合获取流********/
        Collection<String> list= new ArrayList<>();
        Stream<String> s = list.stream();

        /*** Map集合获取流*/
        Map<String,Integer> maps = new HashMap<>();
        //键流
        Stream<String> keyStream = maps.keySet().stream();
        // 值流
        Stream<Integer> valueStream = maps.values().stream();
        //键值对流(拿整体)
        Stream<Map.Entry<String, Integer>> keyAndValueStream = maps.entrySet().stream();

[*]数组获取Stream流的方式
https://img2023.cnblogs.com/blog/3153256/202305/3153256-20230521103056016-1308687877.png
        /**数组获取流****/
        String[] names = {"张三","李四","王五","范二"};
        Stream<String> nameStream = Arrays.stream(names);
        Stream<String> nameStream2 = Stream.of(names);3 Stream流的常用API

3-1 中间操作方法

https://img2023.cnblogs.com/blog/3153256/202305/3153256-20230521103334864-1668957536.png
注意:

[*]中间方法也称为非终结方法,调用完成后返回的新的Stream流可以继续使用,支持链式编程。
[*]在Stream流中无法直接修改集合、数组中的数据。
示例

[*]过滤:查找出以"张"开头的人的名字
list.stream().filter(s->s.startsWith("张")).forEach(s-> System.out.println(s));
[*]统计字符串长度为3的蒜素个数
long size = list.stream().filter(s -> s.length() == 3).count();
[*]limit获取前几个元素
forEach(s -> System.out.println(s)
当s和sout内的s是相同元素时,可以简写成System.out::println
filter代表开始过滤,->代表开始过滤,
list.stream().filter(s -> s.startsWith("张")).limit(2).forEach(s -> System.out.println(s));
list.stream().filter(s -> s.startsWith("张")).limit(2).forEach(System.out::println);
[*]skip跳过前几个元素
list.stream().filter(s -> s.startsWith("张")).skip(2).forEach(System.out::println);
[*]Map:加工方法 :第一个方法为原材料,第二个参数是加工后的结果


[*]给集合元素前面都加上一个前缀xxx
list.stream().map(s -> "xxxx"+s).forEach(System.out::println);

[*]把所有名字都加工成一个学生对象
2为1的简写
1、list.stream().map(s -> new Student(s)).forEach(System.out::println);
2、list.stream().map(Student::new).forEach(System.out::println);
[*]合并流
//public staticStream concat(Stream
页: [1]
查看完整版本: Stream流体系