Stream流,区别与IO流,:Stream是jdk1.8之后的产物,其作用是对数据容器(集合,数组)的操作进行进行简化,其内部方法配合lambda表达式、对数据容器进行处理。大大提高的操作数据容器的效率。
Stream常用的方法:
名称 | 作用 | 种类 | 是否支持链式操作 |
count() | 统计流中元素个数 | 终结方法 | 否 |
forEach() | 遍历容器 | 终结方法 | 否 |
fifter() | 过滤数组 | 支持拼接 | 是 |
limit() | 取前几个数据 | 可以拼接 | 是 |
skip() | 跳过前几个数据 | 支持拼接 | 是 |
map() | 映射方法 | 可以拼接 | 是 |
concat() | 拼接两个流数据 | 可以拼接 | 是 |
toList() | 将流转为List集合 | toSet() | 将流转为Set集合 |
真实开发的时候,最终的结果还是集合 , 流只是扮演一个中间处理数据的角色。提及一点:Stream流只能被消耗一次,如果还想要重新使用,需要重新获得流对象
//先创建一个List对象
ArrayList<Integer> list = new ArrayList<>();
//给集合随机存15个数
Random random = new Random();
for (int i = 0; i < 15; i++) {
list.add(random.nextInt(51));
}
System.out.println(list);
//count()和forEach()方法
long count = list.stream().count();
System.out.println(count);//打印流内元素个数
list.forEach((s)-> System.out.print(s+" "));//循环遍历流元素
System.out.println();
//fifter()、limite()和map()方法
list.stream()
.filter((s)->s>=20) //筛选出比20 大的数字
.limit(3) //限制输出前3个元素
.map(s -> s.toString()) //将Integer流,转为String流
.forEach(s-> System.out.print(s+" ")); //遍历String流
System.out.println();//换行
ArrayList<Integer> listAnd = new ArrayList<>();
listAnd.add(99);
Stream.concat(list.stream(),listAnd.stream()).skip(15).forEach(s-> System.out.println(s));
//演示一下收集方法,实际开发中Stream只是充当一个中间工具,处理之后还要返回容器形式
List<Integer> collect = list.stream()
.filter(s -> s >= 25)
.collect(Collectors.toList());
System.out.println(collect);
Set<Integer> collect1 = list
.stream().filter(s -> s < 20)
.collect(Collectors.toSet());
System.out.println(collect1);