Yrh' Blog

Back

先偷张图

Stream#

map#

<R> stream<R> map(Function<? super T, ? extends R> mapper);
java

挖个坑:这里他这么定义是遵从了一个 “输入逆变、输出协变“的一个规则,等后面再补一篇

Stream.of("hello", "how", "are", "you")
  .map(String::length)
  .forEach(System.out::println);
java

flatMap#

大概就是说把元素拍扁,然后把拍扁的元素重新组成Stream,然后把这些Stream串行合并成一条Stream

<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);
java
Stream.of("a-b-c-d", "1-2-3-4")
  .flatMap(e -> Arrays.stream(e.split("-")))
  .forEach(System.out::println);
java

limit#

限制元素个数

distinct#

去重,默认是根据元素的equals() 和 hashCode()来判断的

filter#

给他一个条件函数传入参数返回true or false即可

Stream<T> filter(Predicate<? super T> predicate);
java

sorted#

用法大差不差,实现Comparable接口就行

Stream<T> sorted();                           // 自然顺序
Stream<T> sorted(Comparator<? super T> comp); // 自定义比较器
java

collect#

<R, A> R collect(Collector<? super T, A, R> collector);
java

这个要整理一下Collectors的api了,看下文吧

reduce#

类似于FP的规约操作

Optional<T> reduce(BinaryOperator<T> accumulator);
T reduce(T identity, BinaryOperator<T> accumulator);
<U> U reduce(U identity,
             BiFunction<U, ? super T, U> accumulator,
             BinaryOperator<U> combiner);
java
Optional<Integer> sum = Stream.of(1, 2, 3, 4, 5)
  .reduce((a, b) -> a + b);

int sum = Stream.of(1, 2, 3, 4, 5)
  .reduce(0, (a, b) -> a + b);

int lengthSum = Stream.of("a", "bb", "ccc")
  .parallel()
  .reduce(
      0,
      (sum, str) -> sum + str.length(),
      Integer::sum
  );
java

Collector#

Collectors.toCollection()#

将数据转成Collection,只要是Collection 的实现都可以,例如ArrayList、HashSet ,该方法接受一个Collection 的实现对象或者说Collection 工厂的入参。 包括后面也有Collectors.toList()、Collectors.toSet() ,这里只是指定了容器的类型。

Collectors.joining()#

基本语法

Collectors.joining()                 // 直接拼接
Collectors.joining(CharSequence delimiter) // 指定分隔符
Collectors.joining(CharSequence delimiter, CharSequence prefix, CharSequence suffix)
// 指定分隔符 + 前缀 + 后缀
java

未完待续…

Java Stream & Collectors
https://blog.myyrh.com/blog/java-collectors/java-collectors
Author woshryz
Published at September 19, 2025
Comment seems to stuck. Try to refresh?✨