1 /**
2 * Java 8引入了全新的Stream API。这里的Stream和I/O流不同,它更像具有Iterable的集合类,但行为和集合类又有所不同.
3 * Java里面定义Stream:
4 * A sequence of elements supporting sequential and parallel aggregate operations.
5 * 解读:
6 * Stream是元素的集合,这点让Stream看起来用些类似Iterator; 可以支持顺序和并行的对原Stream进行汇聚的操作;
7 * Stream<T>接口继承自BaseStream<T, S extends BaseStream<T, S>>,而BaseStream接口则是Stream的基本定义接口.
8 *
9 * BaseStream的核心接口方法:
10 * Iterator<T> iterator(); 表明Stream能够进行迭代操作
11 * Spliterator<T> spliterator(); 表明Stream能够进行分割迭代
12 * boolean isParallel(); 判断Stream是否是并行的Stream
13 * S sequential(); 获取串行的Stream
14 * S parallel(); 获取并行的Stream
15 * S unordered(); 获取无序的Stream
16 * S onClose(Runnable closeHandler); 返回一个同样的Stream,并同时执行一个Runnable,而Stream<T>继承了BaseStream<T, Stream<T>,
17 * 则说明Stream具有BaseStream接口中所描述的方法的能力. 并且Stream对其进行了扩展,如果说BaseStream只是定义了流(Stream)具有哪些能力,
18 * 则Stream接口则定义了一个具体的流能做哪些事情.
19 *
20 * 以下是Stream的的核心接口方法:
21 * Stream<T> filter(Predicate<? super T> predicate) 在Stream中过滤符合指定条件的元素
22 * <R> Stream<R> map(Function<? super T, ? extends R> mapper) 将Stream中的元素转换成另一种数据格式
23 * IntStream mapToInt(ToIntFunction<? super T> mapper) 将Stream中的元素转换成int类型的值
24 * LongStream mapToLong(ToLongFunction<? super T> mapper) 将Stream中的元素转换成long类型的值
25 * DoubleStream mapToDouble(ToDoubleFunction<? super T> mapper) 将Stream中的元素转换成double类型的值
26 * <R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper) 将stream中的元素转换成stream
27 * IntStream flatMapToInt(Function<? super T, ? extends IntStream> mapper) 将stream中的元素转换成int类型的stream
28 * LongStream flatMapToLong(Function<? super T, ? extends LongStream> mapper) 将stream中的元素转换成long类型的stream
29 * DoubleStream flatMapToDouble(Function<? super T, ? extends DoubleStream> mapper) 将stream中的元素转换成double类型的stream
30 * Stream<T> distinct() 将Stream中重复的元素去除掉
31 * Stream<T> sorted() 对Stream中的元素进行排序
32 * Stream<T> sorted(Comparator<? super T> comparator) 对Stream中的元素进行指定比较器进行排序
33 * Stream<T> peek(Consumer<? super T> action) 对Stream中的元素都调用指定的方法,不影响原有元素内容
34 * Stream<T> limit(long maxSize) 限制Stream的元素内容的大小
35 * Stream<T> skip(long n) 获取跳过指定长度的Stream
36 * void forEach(Consumer<? super T> action) 遍历处理Stream中的元素
37 * void forEachOrdered(Consumer<? super T> action) 按照顺序遍历处理Stream中的元素
38 * Object[] toArray() 将Stream转换成对象数组
39 * <A> A[] toArray(IntFunction<A[]> generator) 将Stream 转换成指定对象的数组
40 * T reduce(T identity, BinaryOperator<T> accumulator) 对Stream进行规约操作
41 * Optional<T> reduce(BinaryOperator<T> accumulator) 对Stream进行规约操作
42 * <U> U reduce(U identity, BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner) 对Stream进行规约操作
43 * <R> R collect(Supplier<R> supplier, BiConsumer<R, ? super T> accumulator, BiConsumer<R, R> combiner) 通过指定的收集器,收集Stream的内容
44 * <R, A> R collect(Collector<? super T, A, R> collector) 通过指定的收集器,收集Stream的内容
45 * Optional<T> min(Comparator<? super T> comparator) 通过指定的比较器获取元素的最小值
46 * Optional<T> max(Comparator<? super T> comparator) 通过指定的比较器获取元素的最大值
47 * long count() 获取Stream的元素内容大小
48 * boolean anyMatch(Predicate<? super T> predicate) 判断Stream中是否含有指定要求的元素
49 * boolean allMatch(Predicate<? super T> predicate) 判断Stream中所有元素是否符合指定要求
50 * boolean noneMatch(Predicate<? super T> predicate) 判断Stream中所有元素是否都不符合指定要求
51 * Optional<T> findFirst() 获取Stream中的第一个元素
52 * Optional<T> findAny() 随机获取Stream中的一个元素
53 * public static<T> Builder<T> builder() 获取一个Stream的构造器
54 * public static<T> Stream<T> empty() 获取一个空的Stream
55 * public static<T> Stream<T> of(T t) 向一个Stream中添加元素
56 * public static<T> Stream<T> of(T... values) 向一个Stream中添加元素列表
57 * public static<T> Stream<T> iterate(final T seed, final UnaryOperator<T> f) 迭代Stream
58 * public static<T> Stream<T> generate(Supplier<T> s) 根据指定需求生成一个Stream
59 * public static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b) 连接两个Stream成一个Stream
60 */