Collectors.collectingAndThen详解
Collectors.collectingAndThen()
是一个非常有用的方法,它可以将一个收集器(Collector)转换为另一个收集器或者一个最终的结果。
它的方法签名如下:
public static <T, A, R, RR> Collector<T, A, RR> collectingAndThen(Collector<T, A, R> downstream, Function<R, RR> finisher)
其中,downstream
参数是需要转换的收集器,finisher
参数是一个函数,它将最终的结果类型 R
转换为另一个类型 RR
。
Collectors.collectingAndThen()
方法的作用是,首先使用 downstream
收集器收集元素,然后将收集的结果交给 finisher
函数进行最终的转换,得到最终的结果 RR
。
例如,可以将 Collectors.toList()
收集器转换为一个 List
类型的最终结果:
List<String> strings = Arrays.asList("a", "b", "c", "d", "e");
List<String> result = strings.stream()
.collect(Collectors.collectingAndThen(Collectors.toList(), ArrayList::new));
在上面的示例中,我们将一个字符串列表转换为一个新的 ArrayList
对象,使用了 Collectors.collectingAndThen()
方法,将 Collectors.toList()
收集器转换为一个 List
类型的最终结果。
除了将收集器转换为最终结果类型之外,Collectors.collectingAndThen()
方法还可以将收集器转换为另一个收集器。例如,可以将一个收集器转换为一个 Map
类型的收集器:
List<String> strings = Arrays.asList("a", "bb", "ccc", "dddd", "eeeee");
Map<Integer, String> result = strings.stream()
.collect(Collectors.collectingAndThen(
Collectors.toMap(String::length, Function.identity()), Collections::unmodifiableMap));
在上面的示例中,我们将一个字符串列表按照长度进行分组,然后使用 Collectors.collectingAndThen()
方法,将 Collectors.toMap()
收集器转换为一个不可修改的 Map
类型的最终结果。这里的 Function.identity()
方法用于将字符串本身作为 Map
的值,Collections::unmodifiableMap
方法用于将 Map
包装为不可修改的形式。
相关推荐


















