Stream流知多少
自作孽说熟悉java 8中的Stream,好咯,回答的一头雾水,还是查完资料后整理输出一遍吧。
1、是什么
Stream 使用一种类似与SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象。这种风格类似于将要处理的元素结合看做一种流,流在管道中传输,并且可以在管道的节点上进行处理,比如筛选、排序、集合等等。
2、有什么优点
- 无存储。它只是某中数据源的一种视图,数据源可以是一个数组
- 可消费性。Stream只能被消费一次,一旦遍历过就会失效,想要再次遍历就必须重新生成
- 为函数式编程而生。对Stream的任何修改都不会修改背后的数据源
3、怎么用
对于流的处理,主要有三个关键的操作:
- 流的创建
- 中间操作
- 最终操作
3.1 流的创建:
- 通过已有的list创建一个流
- 通过Stream来创建流 stream.of(....)
3.2 中间操作
- filter:过滤
- limit:取元素(前几个)
- skip:丢弃元素(前几个)
- distinct:去重
- map:转换流中的数据类型
- sorted:排序
3.3 最终方法
- foreach:遍历
- count:统计
- toArray:手机流中的数据放到数组中
- collect:手机流中的数据,房到集合中
4、练习
数据过滤:集合1~10,过滤奇数,只留留下偶数,将结果保存
List<Integer> list = new ArrayList<>(); Collections.addAll(list,1,2,3,4,5,6,7,8,9,10); List<Integet> conllect = list.stream.filter(item -> item%2 == 0).collector.toList());
字符串过滤并收集:arraylist集合,添加"zhangsan,23", "lisi, 4", "wangwu, 25" 保留年龄大于24岁的人,并将结果收集到Map集合中,其中姓名为键,年龄为值
List<String> list = new ArrayList<>();
Collections.addAll(list, "zhangsan,23", "lisi,24", "wangwu,25");
Map<String, String> map = list.stream()
.filter(item -> Integer.parseInt(item.split(",")[1]) >= 24)
.collect(Collectors.toMap(item -> item.split(",")[0], item -> item.split(",")[1]));
System.out.println(map);

浙公网安备 33010602011771号