Collectors.groupingby生成两成map嵌套,或者保持list的顺序生成

  1. groupingby两个参数中的前者,生成的是最外面一层map的key,如果不加第二个参数原本应该生成list,改变他默认的生成规则,第二个参数填我们想让它的value怎么生成。
list的链表.stream().collect(Collectors.groupingBy(Monitor::getNodeId,Collectors.toMap(Monitor::getAddr,Function.identity())));
  1. 保持原有的list顺序生成map
list的链表.stream().collect(Collectors.groupingBy(Monitor::getNodeId, LinkedHashMap::new,Collectors.toList());
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
`Collectors.groupingBy` 是Java Stream API中的一个实用方法,用于将数据流按照指定键值进行分组。它允许你根据元素的某个属性创建一个键值对的映射,其中键是该属性的值,值则是对应键的所有元素。这个方法在处理大量数据和复杂分组需求时非常有用。 复杂用法通常涉及以下几点: 1. **键选择器**:使用`Function`或`Supplier`作为键选择器,它可以是一个方法引用、lambda表达式或自定义函数,确定如何从每个元素中提取用于分组的键。 ```java List<Person> people = ...; Map<String, List<Person>> ageGroups = people.stream() .collect(Collectors.groupingBy(Person::getAge)); ``` 2. **值收集器**:可以选择不同的收集器(如`Collectors.toList()`、`Collectors.toSet()`等)来处理分组后的值列表。这可以定制化每个组的行为。 ```java Map<String, Integer> counts = people.stream() .collect(Collectors.groupingBy(Person::getGender, Collectors.counting())); ``` 3. **复合条件**:可以结合其他流操作,比如`filter()`和`distinct()`,在分组之前进行筛选和去重。 ```java Map<String, List<String>> countriesWithUniqueNames = names.stream() .filter(Objects::nonNull) .collect(Collectors.groupingBy(Function.identity(), Collectors.distinct())); ``` 4. **嵌套分组**:如果需要基于多个属性进行分组,可以使用`Collectors.groupingBy`两次。 ```java Map<String, Map<String, List<Person>>> groupedByCityAndAge = people.stream() .collect(Collectors.groupingBy(Person::getCity, Collectors.groupingBy(Person::getAge))); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

syf_wfl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值