Stream流体系

打印 上一主题 下一主题

主题 1004|帖子 1004|积分 3012

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

1 Stream流概述


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

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

2 Stream流获取


  • Stream流的三类方法:


  • 获取Stream流

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

  • 中间方法

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

  • 终结方法

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


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


  • 集合获取Stream流的方式
    使用Collection接口中的默认方法stream()生成流

  1.         /***Collection集合获取流********/
  2.         Collection<String> list  = new ArrayList<>();
  3.         Stream<String> s = list.stream();
  4.         /*** Map集合获取流*/
  5.         Map<String,Integer> maps = new HashMap<>();
  6.         //键流
  7.         Stream<String> keyStream = maps.keySet().stream();
  8.         // 值流
  9.         Stream<Integer> valueStream = maps.values().stream();
  10.         //键值对流(拿整体)
  11.         Stream<Map.Entry<String, Integer>> keyAndValueStream = maps.entrySet().stream();
复制代码

  • 数组获取Stream流的方式

  1.         /**数组获取流****/
  2.         String[] names = {"张三","李四","王五","范二"};
  3.         Stream<String> nameStream = Arrays.stream(names);
  4.         Stream<String> nameStream2 = Stream.of(names);
复制代码
3 Stream流的常用API

3-1 中间操作方法


注意:

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

  • 过滤:查找出以"张"开头的人的名字
  1. list.stream().filter(s->s.startsWith("张")).forEach(s-> System.out.println(s));
复制代码

  • 统计字符串长度为3的蒜素个数
  1. long size = list.stream().filter(s -> s.length() == 3).count();
复制代码

  • limit获取前几个元素
forEach(s -> System.out.println(s)
当s和sout内的s是相同元素时,可以简写成System.out::println
filter代表开始过滤,->代表开始过滤,
  1. list.stream().filter(s -> s.startsWith("张")).limit(2).forEach(s -> System.out.println(s));
  2. list.stream().filter(s -> s.startsWith("张")).limit(2).forEach(System.out::println);
复制代码

  • skip跳过前几个元素
  1. list.stream().filter(s -> s.startsWith("张")).skip(2).forEach(System.out::println);
复制代码

  • Map:加工方法 :第一个方法为原材料,第二个参数是加工后的结果


  • 给集合元素前面都加上一个前缀xxx
  1. list.stream().map(s -> "xxxx"+s).forEach(System.out::println);
复制代码

  • 把所有名字都加工成一个学生对象
  1. 2为1的简写
  2. 1、list.stream().map(s -> new Student(s)).forEach(System.out::println);
  3. 2、list.stream().map(Student::new).forEach(System.out::println);
复制代码

  • 合并流
[code]//public static  Stream concat(Stream

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

愛在花開的季節

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表