You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java 8 Streams和Lambdas遍历处理值为列表的Map

嘿,用Java 8的Stream和Lambda来处理这个分组的Map其实很灵活,根据你具体的处理需求,我给你几个常用的实现方式:

1. 遍历所有Person元素统一处理

如果不需要保留分组信息,只想对所有Person执行相同操作(比如打印、修改属性),可以用flatMap把每组的列表扁平化成单个Person的流,再用forEach处理:

personMap.entrySet().stream()
    .flatMap(entry -> entry.getValue().stream()) // 将每个List<Person>拆分为Person流
    .forEach(person -> {
        // 这里写你的处理逻辑,示例:打印Person信息
        System.out.printf("姓名:%s,年龄:%d%n", person.getName(), person.getAge());
        // 若需要修改属性(假设Person是可变类)
        // person.setProcessed(true);
    });

2. 按分组处理每组的Person列表

如果需要针对每个分组(比如首字母"A"、"B")单独处理组内的Person,可以直接遍历Map的entry,同时保留分组key:

personMap.entrySet().stream()
    .forEach(entry -> {
        String groupInitial = entry.getKey(); // 获取分组的首字母
        List<Person> groupPersons = entry.getValue();
        
        System.out.println("=== 处理首字母为" + groupInitial + "的分组 ===");
        groupPersons.stream().forEach(person -> {
            // 针对当前分组的Person执行操作
            System.out.println("- 处理人员:" + person.getName());
        });
    });

3. 处理后生成新的集合

如果需要对Person做转换、过滤,再生成新的集合(比如新的Map、List),可以结合collect方法:

示例1:过滤每组中符合条件的Person,生成新的分组Map

// 筛选每组中年龄大于30的Person,生成新的分组Map
Map<String, List<Person>> filteredMap = personMap.entrySet().stream()
    .collect(Collectors.toMap(
        Map.Entry::getKey, // 保留原分组key
        entry -> entry.getValue().stream()
            .filter(person -> person.getAge() > 30) // 过滤条件
            .collect(Collectors.toList())
    ));

示例2:提取所有Person的姓名,生成一个姓名列表

List<String> allNames = personMap.entrySet().stream()
    .flatMap(entry -> entry.getValue().stream())
    .map(Person::getName) // 提取Person的姓名属性
    .collect(Collectors.toList());

小提示

如果你的Person是不可变类(没有setter方法),那处理时要通过map方法生成新的Person实例,比如:

List<Person> updatedPersons = personMap.get("A").stream()
    .map(person -> new Person(person.getName(), person.getAge() + 1)) // 年龄+1生成新对象
    .collect(Collectors.toList());

内容的提问来源于stack exchange,提问作者Saravana Kumar M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:57:25