当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java Collectors partitioningBy()用法及代码示例


CollectorpartitioningBy()方法是java.util.stream.Collectors类的预定义方法,该类用于根据给定谓词对对象(或元素集)流进行分区。存在两种方法的重载变体。一个仅将谓词作为参数,而另一个将谓词和Collector实例作为参数。

partitioningBy(Predicate<? super T> predicate)

用法:

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



其中:

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

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

返回值:此方法返回实现分区操作的Collector。

下面是一个示例来说明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<Integer> 
            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<Boolean, List<Integer> > 
            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(Predicate<? super T>predicate, Collector<? super T, A, D> downstream)

用法:

public static <T> Collector<T, ?, Map<Boolean, List<T>>> partitioningBy(Predicate<? super T>predicate, Collector<? super T, A, D> downstream)

其中:

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

参数:此方法采用两个参数:一个谓词(一个T类型的谓词接口的实例)和一个用于实现“downstream reduction”并产生输出的Collector。

返回值:此方法返回实现分区操作的Collector。

下面是一个示例,说明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<Integer> 
            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<Boolean, Long> 
            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}


相关用法


注:本文由纯净天空筛选整理自SouravAChowdhury_97大神的英文原创作品 Collectors partitioningBy() method in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。