JDK8学习:Stream

Stream,流,理解为集合的操作类

一、特点

1.不存储数据

2.不改变源集合

3.惰性求值 (在满足条件之后,进行一次迭代,得到要求的值)

二、创建方式

1.Stream.of() 、Stream.empty()、Stream.generate()、Stream.iterate()方法

2.Arrays.stream()方法

3.Collection.stream()方法

三、例子

List<Integer> list = new ArrayList<>(10);
      for (int i = 0; i < 100 ; i++) {
         list.add(i);
      }

      // 1.筛选切片
    list.stream()
          .filter(t -> t > 4) // 通过Predicate 断言,过滤元素, 返回流
          .distinct() // 去重,返回流
          .limit(20) // 截取限制操作,只取指定个数,返回流
          .skip(3) // 跳过操作,去之后的元素,返回流
          .forEach(t -> System.out.println(t)); // 遍历操作
    // 2.映射
    list.stream()
          .map(t -> String.valueOf(t) + 1) // 转化操作,根据参数T,转化成R类型,返回结果仍然是流
          .flatMap(t -> list.stream()) // 转化操作,根据参数T,转化成R类型流,这里会生成多个R类型流,返回结果仍然是流
          .forEach(t -> System.out.println(t));
      // 3.匹配
      // 任意一个匹配
      System.out.println(list.stream().anyMatch(t -> t > 50));
      // 完全匹配
      System.out.println(list.stream().allMatch(t -> t > 50));
      // 完全不匹配
      System.out.println(list.stream().noneMatch(t -> t < -1));

      // 4.查找
      // 查询当前流中的任意元素
      Optional<Integer> element = list.stream().findAny();
      System.out.println(element.get());

      // 查询当前流中的第一个元素
      element = list.stream().findFirst();
      System.out.println(element.get());

      // 5.规约 ?? reduce

      // 6.统计
      // 最大值 (返回Optional)
      System.out.println(list.stream().max((t1, t2) -> {
         if (t1 > t2) {
            return 1;
         }
         if (t1 < t2) {
            return -1;
         }
         return 0;
      }));

      // 最小值(返回Optional)
      System.out.println(list.stream().min((t1, t2) -> {
         if (t1 > t2) {
            return 1;
         }
         if (t1 < t2) {
            return -1;
         }
         return 0;
      }));

      // 总数
      System.out.println(list.stream().count());

      // 汇总操作 (常与Collectors工具类一起使用)
      list.stream().filter(t->t>60)
            .collect(Collectors.toList())
      .forEach(t-> System.out.println(t));

猜你喜欢

转载自blog.csdn.net/stubborn_ugly/article/details/82704742