JAVA 8 StreamAPI 和 lambda表达式 总结(二)

2/22/2017来源:ASP.NET技巧人气:1800

1.从迭代器到Stream操作

以前我们遍历一个集合可以用for 循环,iterator迭代器。jdk8新推出了一项特性,Stream语法,用Stream语法可以让代码更加简洁,而且原生支持的并发操作也能提高效率

List<Integer> list = new ArrayList<>(); for (int i = 0; i < 100000; i++) { list.add((int) (Math.random() * 100)); } int count = 0; for (int i : list) { if (i > 50) count++; } System.out.PRintln("传统方法 列表中大于50的数有" + count + "个"); long streamCount = list.stream().filter((x) -> x > 50).count(); System.out.println("Stream流 列表中大于50的数有" + streamCount + "个");

上面的步骤大致是 一个list先转换为stream流,filter等方法就相当于对集合里的每个元素进行遍历然后根据固定条件进行筛选,这些步骤后stream还没有结束它的生命周期,必须要有一个结束方法结束stream,count()方法可以产生一个结果,以结束stream流。

有人说我调用filter方法对集合处理之后,只想返回处理后的集合,可以用下面的方法进行操作:

List<Integer> collect = list.stream().filter((x) -> x > 50).collect(Collectors.toList()); System.out.println("返回的集合个数:" + collect.size());

Stream流作为一个操作流水线,它的执行顺序并不是按照代码的顺序来,它只有执行到count方法,当count方法需要过滤后的东西去统计时,才会执行之前filter方法,但是如果用下面的方法,就可以让stream并行执行count和filter方法。

List<Integer> collect1 = list.parallelStream().filter((x) -> x > 50).collect(Collectors.toList());

parallelStream() 替代了之前的stream()方法。

未完待续