Stream 是用函数式编程方式在集合类上进行复杂操作的工具,其集成了Java 8中的众多新特性之一的聚合操作,开发者可以更容易地使用Lambda表达式,并且更方便地实现对集合的查找、遍历、过滤以及常见计算等。
独立使用Stream的步骤:
1、使用Stream或XxxStream的builder()类方法创建该Stream对应的builder 2、重复调用builder()的add()方法向该流添加多个元素 3、调用builder()方法获取对应的Stream 4、调用Stream的聚集方法
import java.util.Collection; import java.util.ArrayList; public class StreamClass{ public static void main(String[] args){ Collection<String> c = new ArrayList<>(); c.add("lilei"); c.add("hanmeimei"); c.add("Jim Green"); c.add("Lily"); c.add("Lucy"); //String str = c.stream();错误:无法将void转换成String c.stream() .filter(ele -> ((String)ele).contains("L")) .forEach(ele -> System.out.println(ele)); } }
- 创建Stream:通过stream()方法,取得集合对象的数据集。
- Intermediate:通过一系列中间(Intermediate)方法,对数据集进行过滤、检索等数据集的再次处理。如上例中,使用filter()方法来对数据集进行过滤。
- Terminal通过最终(terminal)方法完成对数据集中元素的处理。如上例中,使用forEach()完成对过滤后元素的打印
创建Stream的方式:
从Collection和数组获得
Collection.stream();
Collection.parallelStream();
Arrays.String(T array) 或者 Stream.of()
从BufferedReader获得
java.io.BufferedReader.lines();
静态工厂
java.util.stream.IntStream.range();
java.nio.file.Files.walk();
自己构造
java.util.Spilterator
其他
Random.ints();
BitSet.stream();
Pattern.spiltAsStream(java.lang.charSequence);
JarFile.stream();
流操作的分类