笔记七:Stream流


Stream流

定义:在Java8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream流概念,它可以用于简化集合和数组操作的API

核心思想:先得到集合或者数组的Stream流,把元素放上去,然后就用这个Stream流简化的API来方便的操作元素。

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

数组获取Stream流的方式:Arrays.stream(arrs)Stream.of(arrs)

常用API(中间操作方法)

名称 说明
Stream<T> filter(Predicate<? super T> predicate) 用于对流中的数据进行过滤
Stream<T> limit(long maxSize) 获取前几个元素
Stream<T> skip(long n) 跳过前几个元素
Stream<T> distinct() 去除流中重复的元素。依赖(hashCode和equals方法)
static <T> Stream<T> concat(Stream a, Stream b) 合并a和b两个流为一个流

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

Stream流的常见终结操作方法

名称 说明
void forEach(Consumer action) 对此流的每个元素执行遍历操作
long count() 返回此流中的元素数

注意:终结操作方法,调用完成后流就无法继续使用了,原因是不会返回Stream了。

Stream流的收集操作

就是把Stream流操作后的结果数据转回到集合或者数组中去。这样做的原因是Stream是方便操作集合/数组的手段,而集合/数组才是开发中的目的。

Stream流的收集方法

名称 说明
R collect(Collector collector) 开始收集Stream流,指定收集器

Collectors工具类提供了具体的收集方式

名称 说明
public static <T> Collector toList() 把元素收集到List集合中
public static <T> Collector toSet() 把元素收集到Set集合中
public static Collector toMap(Function keyMapper , Function valueMapper) 把元素收集到Map集合中

例子:

List<String> names = new ArrayList<>();
Collections.addAll(names, "张三丰", "张无忌", "周芷若", "赵敏", "张超");

Stream<String> s1 = names.stream().filter(s -> s.startsWith("张"));
List<String> result = s1.collect(Collectors.toList());
System.out.println(result);

// 也可以使用以下形式,但生成的是不可变集合
List<String> result = s1.toList();
System.out.println(result);

文章作者: 不才叶某
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 不才叶某 !
评论
  目录