java hashmap 分组聚合的核心做法是遍历源数据,以目标字段为 key 构建 mapcollectors.groupingby() 进行声明式处理,或者使用传统的增强 for 循环配合 computeifabsent 方法实现命令式逻辑。

Stream groupingBy 如何按字段分类
使用 Collectors.groupingBy() 可以自动完成分组操作,返回一个 Map,其中 Key 是分组依据的值,Value 是该组所有元素的列表。这种方法代码简洁,适合大多数场景。

import java.util.*;
import java.util.stream.Collectors;
public class GroupByDemo {
public static void main(String[] args) {
List<string> items = Arrays.asList("apple", "banana", "apple", "orange", "banana", "apple");
// 按字符串长度分组
Map<integer list>> grouped = items.stream()
.collect(Collectors.groupingBy(String::length));
System.out.println(grouped);
}
}</integer></string>
传统循环如何实现自定义聚合
当需要更复杂的聚合逻辑(如求和、计数或合并对象)时,使用增强 for 循环结合 Map.computeIfAbsent() 更加灵活。这种方式避免了 Stream 的开销,且能直接操作原始数据结构。

import java.util.*;
public class CustomAggregation {
public static void main(String[] args) {
List<string> items = Arrays.asList("apple", "banana", "apple", "orange", "banana", "apple");
Map<integer integer> countMap = new HashMap();
for (String item : items) {
int key = item.length();
// 如果键不存在则初始化为0,然后自增
countMap.put(key, countMap.getOrDefault(key, 0) + 1);
}
System.out.println(countMap);
}
}</integer></string>
如何处理分组后的空值或默认行为
在分组过程中,如果源数据包含 null 值,groupingBy 会将其作为一个单独的 Key(值为 null)存入结果 Map 中。而在传统循环中,若未做判空处理,可能会抛出 NullPointerException 或导致逻辑错误。因此,在处理前过滤掉 null 值是保证程序健壮性的关键步骤。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











