JDK1.8 新特性-Stream流
1.stream流
1.1 概念
Stream流是JAVA8 API的新成员,它允许以声明性处理数据集合。其通过函数式编程使得代码更简洁且可读性更高。
1.2 使用流程
首先需要将集合转为stream流,然后就可以操作stream流;
//将集合转为stream流
List<String> collect = Arrays.asList("11", "22");
collect.stream();
1.4 操作符-中间操作符、终止操作符
1.4.1 中间操作符
流方法 | 含义 | 示例 |
---|---|---|
filter | 用于根据条件过滤出元素 | List<String> filters collect.stream().filter(v -> StringUtils.isNotBlank(v)).collect(Collectors.toList()); |
distinct | 返回一个元素各异(根据流所生成的元素的hashcode和equals方法实现)的流 | List<String> distincts = collect.stream().distinct().collect(Collectors.toList()); |
limit | 会返回一个不超过给定长度的流 | |
skip | 返回一个扔掉了前n个元素的流 | |
map | 接受一个函数作为参数,这个函数会被应用到每个元素上,并将其映射成一个新的元素 | List<Integer> map = collect.steam().map(Integer::valueOf).collect(Collectors.toList()); |
flatMap | 使用faltMap方法的效果是,各个数组并不是分别映射成一个流,而映射成流的内容。所有使用map时生成的单个流都被合并起来,即一个扁平化为一个流 | `List<List> arrays = Arrays.asList(Arrays.asList(“11”, “22”), Arrays.asList(“33”, “44”)); |
List list = arrays.stream().flatMap(v -> v,stream()).collect(Collectors.toList());` | ||
sort | 排序,支持自定义比较器 |
1.4.2 终止操作符
流方法 | 含义 |
---|---|
anyMatch | 检查是否至少匹配一个元素,返回布尔值 |
allMatch | 检查是否匹配所有元素,返回布尔值 |
noneMatch | 检查是否没有匹配的元素,返回布尔值 |
findAny | 将返回当前流中的任意元素 |
findFirst | 返回第一个元素 |
forEach | 循环 |
collect | 收集器,将流转化为其他形式,例如ArrayList |
reduce | 将流中所有元素反复结合起来得到一个值 |
count | 计数 |