持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第31天,点击查看活动详情
Stream创建
- IntStream
- LongStream
- DoubleStream
stream 和 parallelStream 区别
- stream 是顺序流,由主线程按顺序对流执行操作
- parallelStream 是并行流,内部以多线程并行执行的方式对流进行操作,但前提是流中的数据处理没有顺序要求
通过Collection系列集合提供的方法
default Stream<E> stream():返回一个顺序流
Stream<String> stream = list.stream();
default Stream<E> parallelStream():返回一个并行流
Stream<String> stream = list.parallelStream();
通过Arrays数组提供的方法
static <T> Stream<T> stream(T[] array):返回一个流
Stram<User> stream = Arrays.stream(new User[10]);
build
public static<T> Builder<T> builder():
empty
public static<T> Stream<T> empty():返回一个空的顺序 Stream,该 Stream 里面不包含元素项
Stream<Object> empty = Stream.empty();
of(T t)
public static<T> Stream<T> of(T t):通过 Stream 的静态方法 of(),返回含有一个 T 元素的 Stream
of(T... values)
public static<T> Stream<T> of(T... values) :通过 Stream 的静态方法 of(),返回一个流
- 底层实现:
Arrays.stream(values); Stream<String> stream = Stream.of("aa","bb","cc");
iterate
public static<T> Stream<T> iterate(final T seed, final UnaryOperator<T> f) :返回一个无限长度的 Stream,通过函数 f
迭代对给指定的元素种子而产生无限连续有序 Stream,其中包含的元素可以认为是:seed,f(seed),f(f(seed))无限循环
- iterate 跟 reduce 操作很像,接受一个种子值,和一个 UnaryOperator(例如 f)。 然后种子值成为 Stream 的第一个元素,f(seed) 为第二个,f(f(seed)) 第三个,以此类推。 在 iterate 时候管道必须有 limit 这样的操作来限制 Stream 大小
Stream <Integer> stream = Stream.iterate(0,(x)-> x+2).forEach(System.out::println);- 生成一个等差队列:
Stream.iterate(2, n -> n + 2);
generate
public static<T> Stream<T> generate(Supplier<T> s):返回一个无限长度的 Stream,其元素由 Supplier 接口的提供
- 生成无限长的随机数:
Stream.generate(() -> Math.rondom());
lines
public static Stream<String> lines(Path path) throws IOException :文件生成流,每个元素是给定文件的其中一行