java中stream流中Collectors.groupingBy和Collectors.partitioningBy实例的区别和联系实例?

在Java中,Collectors.groupingBy()和Collectors.partitioningBy()都是用于对流元素进行分组的Collectors工具方法。它们之间的区别和联系如下:

功能:
Collectors.groupingBy():根据指定的分类函数将流元素分组为一个Map>,其中K表示分组的键,List表示该键对应的元素列表。
Collectors.partitioningBy():根据指定的条件对元素进行划分,将满足条件的元素放入true键对应的列表,不满足条件的元素放入false键对应的列表。
返回值类型:
Collectors.groupingBy():返回一个Map>,其中K是根据分类函数生成的键,List是该键对应的元素列表。
Collectors.partitioningBy():返回一个Map>,其中true键对应满足条件的元素列表,false键对应不满足条件的元素列表。
以下是一个示例代码演示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 fruits = Arrays.asList("apple", "banana", "cherry", "date", "elderberry");

        // 使用 groupingBy() 根据首字母分组
        Map> groupByResult = fruits.stream()
                .collect(Collectors.groupingBy(s -> s.charAt(0)));
        
        System.out.println("Grouped by first letter:");
        System.out.println(groupByResult);
        
        // 使用 partitioningBy() 根据字符串长度划分
        Map> partitioningByResult = fruits.stream()
                .collect(Collectors.partitioningBy(s -> s.length() > 5));
        
        System.out.println("\nPartitioned by length > 5:");
        System.out.println(partitioningByResult);
    }
}
在上述示例中,我们有一个水果列表fruits。首先,我们使用groupingBy()方法根据每个水果的首字母将它们分组成一个Map>,其中键是首字母,值是对应的水果列表。

接下来,我们使用partitioningBy()方法根据水果名称的长度是否大于5将它们进行划分,生成一个Map>,其中true键对应长度大于5的水果列表,false键对应长度不大于5的水果列表。

通过打印输出,我们可以查看分组和划分操作的结果。

需要注意的是,groupingBy()和partitioningBy()方法都提供了其他重载版本,使你能够对分组或划分的元素进行更复杂的操作,例如指定元素收集器、映射函数等。这些方法提供了更灵活的选项,以满足不同的需求。

你可能感兴趣的:(springboot,java,java,python,windows)