java8中的部分流库

流与集合之间的差异

1. 流并不存储其元素
    这些元素存在底层集合中,或按需生成
2. 流的操作不会修改其数据源
    如使用流中的filter方法,会生成一个包含过滤元素的新的流,原来的流不变
3. 流的操作是尽可能惰性执行
    需要其结果才会执行

创建流的几种方法

方法 描述
Stream.of(T… values) 产生一个元素为给定值的流
Stream.empty() 产生一个不包含任何元素的流
Stream.generate(Supplier s) 通过反复调用函数产生一个无限流
Stream.iterate(T seed, UnaryOperator f) 返回一个无限连续有序Stream通过函数的迭代应用产生f为初始元素seed,产生Stream包括seed,f(seed),f(f(seed))等
Arrays.stream(T[] array, int startInclusive, int endExclusive) 通过数组的指定范围创建流
Pattern.splitAsStream(String content) 通过正则表达式生成流
File.lines(PAthenapath,Charset cs) 指定文件中的行生成流

Stream中的一些重要方法

filter map flatMap limit skip concat sorted dostinct peek forEach iterator toArray

方法 描述
collect(Collector collector) stream.colect(Collectors.join(“,”)) 使用给定的收集器来手机流中的元素
reduce(T identity, BinaryOperator accumulator) 用给定的accumulator函数产生六中元素的累积总和

并行流

  • parallel方法可以将任意顺序的流转换成并行流
  • 当流操作并行运行时,其目标是要让其返回结果与顺序执行时返回的结果相同,这些操作可以以任意顺序执行。
  • 只要在终结方法执行时,流处于并行模式,那么所有的中间流操作都将被并行化
  • 只有在对已经位于内存中的数据执行大量计算操作时,才应该使用并行流

使用Optional类型

  • Optional对象是一种包装器对象,要么包装了类型T的对象,要么没有包装任何对象
  • Stream中的方法有max min findFirst findAny 等方法返回Option对象
方法 描述
orElse(T other) 产生这个optional的值,当该值为空时产生other
orElseGet(Supplier other) 返回值如果存在,否则调用other并返回该调用的结果。
orElseThrow(Supplier exceptionSupplier) 返回包含的值(如果存在),否则抛出由提供的供应商创建的异常
ifPresent(Consumer consumer) 如果optional的值不为空,则将它的值传递给consumer
map(Function mapper) 将optional的值传递给mapper后的结果,只要这个optional不为空且结果不为null,否则产生一个空的optional
get() 如果这个值存在Optional,返回值,否则抛出NoSuchElementException
isPresent() true如果存在值,则返回,否则返回false
of(T value) Optional用指定的当前非空值返回一个
ofNullable(T value) 返回一个Optional描述指定的值,如果非null,否则返回一个空值Optional
empty() 返回一个空Optional实例
flatMap(Function> mapper) 如果存在值,则将提供的Optional映射函数应用于该函数,返回该结果,否则返回空值 Optional

猜你喜欢

转载自blog.csdn.net/qq_31898845/article/details/80669543