📜  Java中的收集器 partitioningBy() 方法(1)

📅  最后修改于: 2023-12-03 15:32:00.738000             🧑  作者: Mango

Java中的收集器 partitioningBy() 方法

Java中提供了一个收集器 (Collector) 接口用于将Stream流转换为不同类型的集合或映射,其中包括 partitioningBy() 方法,它可以将流中的元素按照一个断言是否满足分为两个集合中。

语法
public static <T> Collector<T, ?, Map<Boolean, List<T>>> partitioningBy(Predicate<? super T> predicate)

它接受一个 Predicate 函数作为参数,将其应用于流中的每个元素,并根据其返回值 (true/false) 将元素分为两个集合。

返回一个最终结果类型为 Map<Boolean, List> 的Collector。其中键为true/false,值为Predicate返回true/false的元素列表。

用例

以下是 partitioningBy() 方法的一个示例。假设我们有一个字符串列表,我们想将字符串按其长度是否大于等于5分为两个列表中。

List<String> list = Arrays.asList("apple", "banana", "cat", "dog", "elephant");

Map<Boolean, List<String>> result =
        list.stream()
            .collect(Collectors.partitioningBy(s -> s.length() >= 5));
System.out.println(result);

输出结果为:

{false=[cat, dog], true=[apple, banana, elephant]}

我们可以看到,根据每个字符串的长度,将列表分成了两个列表。

注意事项
  • partitioningBy() 方法适用于基于条件分组的场景,它通常优于使用 filter() 和 collect() 方法。
  • 当分组的结果只有两组时,建议使用 partitioningBy() 方法。如果分组的结果多于两组,则可以使用 groupingBy() 方法。
  • partitioningBy() 方法会创建一个 Predicate 函数,并将其作为参数传递给 filter() 方法。因此,在性能方面,partitioningBy() 方法要优于自行创建 Predicate 函数并使用 filter() 方法。