在Java中,Collectors.groupingBy()和Collectors.partitioningBy()都是用于对流元素进行分组的Collectors工具方法。它们之间的区别和联系如下:
功能:
Collectors.groupingBy():根据指定的分类函数将流元素分组为一个Map
Collectors.partitioningBy():根据指定的条件对元素进行划分,将满足条件的元素放入true键对应的列表,不满足条件的元素放入false键对应的列表。
返回值类型:
Collectors.groupingBy():返回一个Map
Collectors.partitioningBy():返回一个Map
以下是一个示例代码演示Collectors.groupingBy()和Collectors.partitioningBy()的用法和区别:
java Copy code
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class GroupingByPartitioningByExample {
public static void main(String[] args) {
List
// 使用 groupingBy() 根据首字母分组
Map
.collect(Collectors.groupingBy(s -> s.charAt(0)));
System.out.println("Grouped by first letter:");
System.out.println(groupByResult);
// 使用 partitioningBy() 根据字符串长度划分
Map
.collect(Collectors.partitioningBy(s -> s.length() > 5));
System.out.println("\nPartitioned by length > 5:");
System.out.println(partitioningByResult);
}
}
在上述示例中,我们有一个水果列表fruits。首先,我们使用groupingBy()方法根据每个水果的首字母将它们分组成一个Map
接下来,我们使用partitioningBy()方法根据水果名称的长度是否大于5将它们进行划分,生成一个Map
通过打印输出,我们可以查看分组和划分操作的结果。
需要注意的是,groupingBy()和partitioningBy()方法都提供了其他重载版本,使你能够对分组或划分的元素进行更复杂的操作,例如指定元素收集器、映射函数等。这些方法提供了更灵活的选项,以满足不同的需求。