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

Java实现lastnamesByFirstname方法按firstName分组问题

问题根因

单参数的Collectors.groupingBy(Person::getFirstName)默认会将同组的完整Person对象收集为列表,最终返回类型为Map<String, List<Person>>,和要求的Map<String, List<String>>类型不匹配。

正确实现

给groupingBy传入第二个下游收集器参数,通过Collectors.mapping先提取同组元素的lastName字段,再将提取出的姓氏收集为列表即可。
完整代码:

import java.util.List;
import java.util.Map;
import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.mapping;
import static java.util.stream.Collectors.toList;

static Map<String, List<String>> lastnamesByFirstname(List<Person> people){
    return people.stream()
            .collect(groupingBy(
                    Person::getFirstName,
                    mapping(Person::getLastName, toList())
            ));
}
执行逻辑说明
  • 第一个参数Person::getFirstName:指定分组键为用户的firstName字段
  • 第二个参数mapping(Person::getLastName, toList()):对同分组内的所有元素先做字段映射,只保留lastName值,再将这些字符串值收集为List,最终返回的结果完全符合预期结构:
{
  "Mary" -> ["Smith", "Silver"],
  "Joe" -> ["Smith"]
}

内容的提问来源于stack exchange,提问作者Viktor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:31:01