news 2026/6/12 1:41:53

Java 中将 List 中对象的某一列转换为 Set

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java 中将 List 中对象的某一列转换为 Set

在 Java 中将 List 中对象的某一列转换为 Set,有几种常用方法:

1. 使用 Stream API(最常用)

import java.util.*; import java.util.stream.Collectors; // 示例类 class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } } public class Main { public static void main(String[] args) { List<Person> personList = Arrays.asList( new Person("张三", 25), new Person("李四", 30), new Person("王五", 25), new Person("张三", 28) // 重复的张三 ); // 方法1:提取 name 列到 Set(自动去重) Set<String> nameSet = personList.stream() .map(Person::getName) // 提取 name .collect(Collectors.toSet()); System.out.println(nameSet); // [张三, 李四, 王五] // 方法2:提取 age 列到 Set Set<Integer> ageSet = personList.stream() .map(Person::getAge) .collect(Collectors.toSet()); System.out.println(ageSet); // [25, 30, 28] } }

2. 指定具体的 Set 实现

// 使用 HashSet Set<String> nameSet = personList.stream() .map(Person::getName) .collect(Collectors.toCollection(HashSet::new)); // 使用 TreeSet(排序) Set<String> sortedNameSet = personList.stream() .map(Person::getName) .collect(Collectors.toCollection(TreeSet::new)); // 使用 LinkedHashSet(保持插入顺序) Set<String> linkedNameSet = personList.stream() .map(Person::getName) .collect(Collectors.toCollection(LinkedHashSet::new));

3. 处理可能为 null 的情况

// 方法1:过滤掉 null Set<String> nameSet = personList.stream() .map(Person::getName) .filter(Objects::nonNull) // 过滤 null .collect(Collectors.toSet()); // 方法2:使用 filter 和 Optional Set<String> nameSet = personList.stream() .map(Person::getName) .filter(name -> name != null && !name.trim().isEmpty()) // 过滤 null 和空字符串 .collect(Collectors.toSet());

4. 复杂对象属性提取

// 如果属性是嵌套对象 class Department { private String deptName; // getters and setters } class Employee { private String name; private Department department; // getters and setters } // 提取嵌套属性 Set<String> deptNames = employeeList.stream() .map(Employee::getDepartment) .filter(Objects::nonNull) .map(Department::getDeptName) .collect(Collectors.toSet());

5. 并行流处理(大数据量时)

Set<String> nameSet = personList.parallelStream() // 并行处理 .map(Person::getName) .collect(Collectors.toSet());

6. 传统方法(不使用 Stream)

// 传统 for 循环 Set<String> nameSet = new HashSet<>(); for (Person person : personList) { nameSet.add(person.getName()); } // 传统 for 循环,处理 null Set<String> nameSet = new HashSet<>(); for (Person person : personList) { if (person.getName() != null) { nameSet.add(person.getName()); } }

主要区别对比

方法

优点

缺点

Stream API

代码简洁,可读性好,支持链式调用

Java 8+

并行流

大数据量性能好

线程安全需注意

传统循环

兼容性好,Java 8 以下可用

代码冗长

最佳实践建议

  1. 推荐使用 Stream API:代码简洁,可读性好

  2. 考虑使用 LinkedHashSet:如果需要保持顺序

  3. 总是处理 null 值:避免 NullPointerException

  4. 大数据量考虑并行流:但要注意线程安全问题

  5. 使用具体类型:明确指定 Set 的实现类型,便于维护

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 18:33:41

DL00308 - 高光谱遥感反演机器学习代码中的植被指数分析

DL00308-高光谱遥感反演机器学习代码植被指数分析python 原始光谱一阶导数光谱的相关性以及水平检验, 植被指数、遥感参数的相关系数以及水平检验, 去偏移值最小二乘回归最近在研究高光谱遥感反演机器学习代码&#xff0c;其中植被指数的分析部分真的很有趣&#x1f603;。 原始…

作者头像 李华
网站建设 2026/6/11 21:01:46

如何将外包与内部团队的平衡

在当今竞争激烈的商业环境中&#xff0c;企业在资源分配与团队管理上面临着前所未有的挑战。**要实现外包与内部团队的平衡&#xff0c;关键在于明确核心业务边界、建立协同机制、强化沟通与文化融合。**只有做到“取其所长、补己所短”&#xff0c;企业才能在保持灵活性的同时…

作者头像 李华
网站建设 2026/6/10 18:33:42

谁懂大龄程序员[特殊字符]‍[特殊字符]的痛啊

这是来自小红书一位后端开发工程师分享的和前段老婆关于裁员失业的焦虑。 说真的&#xff0c;这两年看着身边一个个搞Java、C、前端、数据、架构的开始卷大模型&#xff0c;挺唏嘘的。大家最开始都是写接口、搞Spring Boot、连数据库、配Redis&#xff0c;稳稳当当过日子。 …

作者头像 李华
网站建设 2026/6/10 17:10:20

Docker(单机Kafka安装)

1. pull镜像 docker pull zookeeper docker pull wurstmeister/kafka2. 创建通信网络。zookeeper和kafka之间的通信 docker network create kafka_zk_net查看网络 docker network ls docker network inspect kafka_zk_net3. 创建容器 docker run --netkafka_zk_net --name z…

作者头像 李华
网站建设 2026/6/10 11:32:25

DDD碎片记录 01.落地到数据库设计

系统用例设计&#xff0c;分析系统需要完成的功能。分析系统的业务实体&#xff0c;在领域模型分析中采用类图的形式&#xff0c;每个类可以通过其属性来表述数据结构&#xff0c;又可以通过添加方法来描述对数据结构的处理。 因此在领域模型的设计过程中&#xff0c;即完成了对…

作者头像 李华
网站建设 2026/6/10 13:36:40

推荐汽车制造业拧紧工艺智能化解决方案有哪些?

拧紧工艺&#xff1a;汽车制造中的隐形守护者在当今汽车制造业的快节奏发展环境中&#xff0c;拧紧工艺系统作为连接关键零部件的隐形支柱&#xff0c;扮演着不可忽视的角色。想象一下&#xff0c;一辆汽车的发动机缸盖螺栓如果不精确拧紧&#xff0c;可能会导致密封失效&#…

作者头像 李华