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

📅  最后修改于: 2022-05-13 01:54:57.493000             🧑  作者: Mango

Java中的收集器 partitioningBy() 方法

Collectors partitioningBy()方法是Java.util.stream.Collectors 类的预定义方法,用于根据给定谓词对对象流(或一组元素)进行分区。存在该方法的两个重载变体。一个只接受一个谓词作为参数,而另一个接受谓词和一个收集器实例作为参数。

partitioningBy(Predicate 谓词)

句法:

在哪里,

  • Interface Collector< T, A, R > :一种可变归约操作,将输入元素累积到可变结果容器中,在处理完所有输入元素后,可选择将累积结果转换为最终表示。归约操作可以顺序或并行执行。
    • T:归约操作的输入元素的类型。
    • A:归约操作的可变累积类型。
    • R:归约操作的结果类型。
  • Map>:包含输出的映射。键是布尔值(true 或 false),相应的值是包含T类型元素的列表。

参数:此方法采用强制参数谓词,该谓词是T类型的谓词接口的实例。

返回值:该方法返回一个实现分区操作的收集器

下面是一个示例来说明 partitioningBy() 方法:

程序:

// Java code to show the implementation of
// Collectors partitioningBy() function
  
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
  
class Gfg {
  
    // Driver code
    public static void main(String[] args)
    {
        // creating an Integer stream
        Stream
            s = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
  
        // using Collectors partitioningBy()
        // method to split the stream of elements into
        // 2 parts, greater than 3 and less than 3.
        Map >
            map = s.collect(
                Collectors.partitioningBy(num -> num > 3));
  
        // Displaying the result as a map
        // true if greater than 3, false otherwise
        System.out.println("Elements in stream "
                           + "partitioned by "
                           + "less than equal to 3: \n"
                           + map);
    }
}
输出:
Elements in stream partitioned by less than equal to 3: 
{false=[1, 2, 3], true=[4, 5, 6, 7, 8, 9, 10]}

partitioningBy(Predicatepredicate, Collector 下游)

句法:

在哪里,

  • Interface Collector< T, A, R > :一种可变归约操作,将输入元素累积到可变结果容器中,在处理完所有输入元素后,可选择将累积结果转换为最终表示。归约操作可以顺序或并行执行。
    • T:归约操作的输入元素的类型。
    • A:归约操作的可变累积类型。
    • R:归约操作的结果类型。
  • Map>:包含输出的映射。键是布尔值(true 或 false),相应的值是包含T类型元素的列表。

参数:此方法有两个参数,一个谓词,它是T类型的谓词接口的实例,以及一个用于实现“下游缩减”并产生输出的收集器。

返回值:该方法返回一个实现分区操作的收集器

下面是一个示例来说明 partitioningBy() 方法的类型 2:

// Java code to show the implementation of
// Collectors partitioningBy() function
  
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
  
class ArraytoArrayList {
  
    // Driver code
    public static void main(String[] args)
    {
        // creating an Integer stream
        Stream
            s = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
  
        // Using Collectors.counting() method
        // to count the number of elements in
        // the 2 partitions
        Map
            map = s.collect(
                Collectors.partitioningBy(
                    num -> (num > 3), Collectors.counting()));
  
        // Displaying the result as a map
        // true if greater than 3, false otherwise
        System.out.println("Elements in stream "
                           + "partitioned by "
                           + "less than equal to 3: \n"
                           + map);
    }
}
输出:
Elements in stream partitioned by less than equal to 3: 
{false=3, true=7}