Stream篇
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 */