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));