You need to enable JavaScript to run this app. 如何从存储多属性Person对象的Java ArrayList中提取并打印不重复姓名
优惠活动
大模型
产品
解决方案
定价
更多

如何从存储多属性Person对象的Java ArrayList中提取并打印不重复姓名

自定义对象列表的去重姓名输出实现

你之前搜到的简单类型列表去重方案不适用,核心原因是:那些示例是直接对列表存储的元素本身做去重,而实际需求是对列表元素的某一个字段值做去重,全程不需要改动原有自定义类的逻辑,直接提取字段值再做去重即可。

方案1:Java 8+ Stream流实现(代码最简洁,天然保序)

在原有main方法的列表初始化完成后,直接追加以下代码即可:

people.stream()
      // 从每个Person实例中提取姓名字段
      .map(Person::getName)
      // 对提取出的姓名字符串执行去重
      .distinct()
      // 逐行在控制台打印
      .forEach(System.out::println);

运行后输出结果严格按照姓名首次出现的顺序排列,依次为Paul、Sabrina、Max,完全匹配需求。

方案2:传统遍历+Set去重(兼容Java 8之前的低版本环境)

利用Set集合不存储重复元素的特性,逐一遍历列表提取姓名,自动过滤重复值:

// 用LinkedHashSet保证姓名输出顺序和首次出现的顺序一致,避免普通HashSet的乱序问题
Set<String> uniqueNames = new LinkedHashSet<>();
for (Person person : people) {
    uniqueNames.add(person.getName());
}
// 遍历打印去重后的姓名
for (String name : uniqueNames) {
    System.out.println(name);
}

注意:以上两种方案都完全不需要改动原有Person类的代码,也不需要为了适配去重重写equals()和hashCode()方法——因为我们去重处理的对象是提取出来的字符串类型姓名,不是Person实例本身,刚好绕开了自定义对象列表去重需要重写方法的繁琐步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 22:45:04