简单聊聊【java.util.Stream】,更新中
public class Main {public static void main(String[] args) {List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6); // 原始容器:java.util.Arrays.ArrayList#ArrayList// 创建一个 Stream,过滤出偶数,并打印它们numbers.stream() // ReferencePipeline.Head容器(里面会套一层ArraySpliterator,形如XxxSplilterator).filter(n -> n % 2 == 0) // filter的结果已经变成了StatelessOp类.map(t -> t) // map的结果也是StatelessOp类// 查看了flatMap底层的处理,发现就是多处理了一层。那么我们可以用多个flatMap处理3层,4层的Stream。.flatMap(t -> Stream.of(t)) // flatMap的结果也是StatelessOp类.forEach(System.out::println); // 执行的是StatelessOp类的forEach方法}
}
- Arrays.asList底层是Arrays类中的一个内部类ArrayList(不是java.util.ArrayList是,虽然都叫做ArrayList)
- xxx.stream()代码的作用一般都是把数据对象封装成ReferencePipeline.Head对象(该对象中已经包括了数据)
- filter方法,对一个一个StatelessOp类
- map方法,对应一个StatelessOp类
- flatMap方法,也对应一个StatelessOp类。备注:flatMap一般用来处理多层的,如:Stream[][],2层,3层,n层都可以