0%

Stream API

Stream API 是对数据源的元素支持聚合操作

1. 生成 Stream Source

  • Collection.steam() 为集合创建串行流

  • Collection.parallelStream() 为集合创建并行流, 集合元素越多, 使用的资源越多.

  • Arrays.stream(T array) or Stream.of()

  • java.io.BufferedReader.lines()

  • java.util.stream.IntStream.range()

  • java.nio.file.Files.walk()

  • java.util.Spliterator

  • Random.ints()

  • BitSet.stream()

  • Pattern.splitAsStream(java.lang.CharSequence)

  • JarFile.stream()

2. stream 操作

流的操作分 3 种:

  • Intermediate
    一个流可以后面跟随零个或多个 intermediate 操作.
    其目的主要是打开流, 做出某种程度的数据映射/过滤, 然后返回一个新的流, 交给下一个操作使用.
    这类操作都是惰性化的(lazy), 就是说, 仅仅调用到这类方法, 并没有真正开始流的遍历.

    • map (mapToInt, flatMap 等)
      • mapToInt
        转换成一个 int 数组后, 可使用 summaryStatistics() 返回 IntSummaryStatistics 对象, 进行统计操作, 如 getMax, getMin, getSum, getAverage
    • flatMap
    • filter
    • distinct
    • sorted
    • peek 对每个元素执行操作并返回一个新的 Stream
    • limit
    • skip
    • parallel
    • sequential
    • unordered
  • Terminal
    一个流只能有一个 terminal 操作, 当这个操作执行后, 流就被使用 了, 无法再被操作.
    所以这必定是流的最后一个操作.
    Terminal 操作的执行, 才会真正开始流的遍历, 并且会生成一个结果, 或者一个 side effect.

    • forEach 接收一个 Lambda 表达式, 然后在 Stream 的每一个元素上执行该表达式.

    • forEachOrdered

    • toArray

    • reduce

    • collect

    • min

    • max

    • count

    • anyMatch

    • allMatch

    • noneMatch

    • findFirst

    • findAny

    • iterator

  • short-circuiting

    • 对于一个 intermediate 操作, 如果它接受的是一个无限大(infinite/unbounded)的 Stream, 但返回一个有限的新 Stream.

    • 对于一个 terminal 操作, 如果它接受的是一个无限大的 Stream, 但能在有限的时间计算出结果.

    • anyMatch

    • allMatch

    • noneMatch

    • findFirst

    • findAny

    • limit

3. 自己生成流

1
2
3
4
5
6
Random seed = new Random();
Supplier<Integer> random = seed::nextInt;
Stream.generate(random).limit(10).forEach(System.out::println);
//Another way
IntStream.generate(() -> (int) (System.nanoTime() % 100)).
limit(10).forEach(System.out::println);
1
Stream.iterate(0, n -> n + 3).limit(10). forEach(x -> System.out.print(x + " "));

实现了很多归约操作,如 Collectors.toList(), Collectors.joining(", ")

4. Resource