Stream流的创建
不同的数据类型,其创建stream流的方法不同,主要有以下四种类型:
数据类型 | 创建方法 |
---|---|
单列集合 | Collection中的默认方法stream() |
双列集合 | 无法直接使用stream(),需要先转换为单列集合 |
数组 | Arrays工具类中的静态方法Arrays.stream() |
零散数据 | Stream接口中的静态方法Stream.of() |
注意点:Stream.of()方法如下,其可以传一个可变长类型的参数,数组的底层本质也是一个可变长的数据,这就意味着我们也可以用Stream.of()来创建数组的stream流对象,但是要强调的是其只能传递一个引用类型的数组,传递基本类型的数据时,会把其整体看成是一个元素传入
public static<T> Stream<T> of(T... values) {
return Arrays.stream(values);
}
Stream中的中间方法
调用中间方法会返回一个新的Stream流,需要注意的是原来的Stream流只能使用一次,用完后不能再次使用,使用建议使用链式编程
方法 | 说明 |
---|---|
filter | 过滤 |
limit | 获取前几个元素 |
skip | 跳过前几个元素 |
distinct | 去重,利用equals和hashCode方法 |
concat | 静态方法,将a和b合并为一个流 |
map | 转换流中的数据 |
接下来为各个方法的使用示例
filter
输出大于等于5的元素
int[] arr={1,2,3,4,5,6,7,8,9};
Arrays.stream(arr)
.filter(num-> num>=5)
.forEach(num-> System.out.println(num));
运行结果
limit
输出前3个数
int[] arr={1,2,3,4,5,6,7,8,9};
Arrays.stream(arr)
.limit(3)
.forEach(num-> System.out.println(num));
运行结果
skip
跳过前三个元素
int[] arr={1,2,3,4,5,6,7,8,9};
Arrays.stream(arr)
.skip(3)
.forEach(num-> System.out.println(num));
运行结果
distinct
元素去重
int[] arr={1,1,1,2,2,3,4,5,5,6,7,8,9};
Arrays.stream(arr)
.distinct()
.forEach(num-> System.out.println(num));
运行结果
concat
合并流对象
String[] arr1={"张三","李四"};
String[] arr2={"王五"};
Stream.concat(Arrays.stream(arr1),Arrays.stream(arr2))
.forEach(name-> System.out.println(name));
运行结果
map
转换流中的数据类型,例如把字符串中的年龄提取出来
String[] arr={"张三-18","李四-20"};
Arrays.stream(arr)
.map(str->Integer.parseInt(str.split("-")[1]))
.forEach(age-> System.out.println(age));
运行结果
终结方法
方法 | 说明 |
---|---|
forEach | 遍历 |
count | 统计个数 |
toArray | 转换为数组 |
toCollection | 转换为集合 |