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

178 篇文章 7 订阅

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

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值