在 Java8 中, 出现了 stream 流的概念. 我个人认为, 流的使用可以帮助我们更好的对数据集合进行迭代.
下面, 先简单看一下普通 for 循环和 stream 流的代码.
- public static void main(String[] args) {
- // 取出偶数
- List<Integer> list = Arrays.asList(1,2,3,4);
- //1.for 循环
- List<Integer> newList1 = new ArrayList<>();
- for (Integer integer : list) {
- if(integer % 2 == 0){
- newList1.add(integer);
- }
- }
- System.out.println(newList1);
- //2.stream 流
- List<Integer> newList2 = list.stream().filter(x -> x % 2 == 0).collect(Collectors.toList());
- System.out.println(newList2);
- }
输出结果:
[2, 4] [2, 4]
可以看出, 对于 stream 流的使用, 有时是可以简化我们代码的负责度, 并且配合 lambda 表达式, 可以让代码更加容易被人理解.
下面简单介绍一下 Java 中 stream 流的使用:
1. 创建 stream 流
List 集合创建创建: 调用 List 的 stream 方法即可, 如 list.stream()
数组的创建方式为: 通过 Arrays.stream() 传入数组即可, 如: Arrays.stream(new Integer[]{1,2})
注: stream 流被创建出来之后只能被使用一次, 如需再次循环需要再次创建!
2. 常用方法介绍:
流的方法被分为中间操作和终端操作, 顾名思义, 中间操作是指调用方法后生成新的流, 可以继续执行操作, 而终端操作则是结束流的使用.
中间操作:
1.filter 过滤掉不符合的数据
2.limit 只取前 x 条数据
3.skip 跳过 (删除)x 条数据
4.distinct 去重复数据
5.sorted 排序
6.map 对数据重整, 生成新的数据流 (如何从用户集合流中取出用户年龄作为新的流)
终端操作:
1.count 统计数据数量
2.forEach 对流中每个数据都执行传入的方法
3.anyMatch 至少一个匹配, 返回 bool
4.allMatch 匹配所有, 返回 bool
5.collect 可以传入集合中的常用方法, 例如: Collector.toList() 将流转回集合, Collector.groupingBy() 将流中数据分组
6.reduce 进行归约操作, 例如求和等
今天就先做了一下 Java 中 stream 流的简单使用介绍, 谢谢.
来源: http://www.bubuko.com/infodetail-2734500.html