当前位置: 首页 > news >正文

沈阳网站建设找世纪兴sem推广软件选哪家

沈阳网站建设找世纪兴,sem推广软件选哪家,网站策划书的政策背景,泰安高新区建设局网站在 Java 中,使用 Stream 流对自定义对象数组去重的核心是确保对象能正确判断“重复”的逻辑。以下是具体实现方法及场景分析: 方法 1:直接使用 distinct()(需重写 equals 和 hashCode) 若自定义对象已正确重写 equals…

在 Java 中,使用 Stream 流对自定义对象数组去重的核心是确保对象能正确判断“重复”的逻辑。以下是具体实现方法及场景分析:


方法 1:直接使用 distinct()(需重写 equalshashCode

若自定义对象已正确重写 equals()hashCode() 方法,可直接通过 distinct() 去重。
适用场景:对象的唯一性由所有字段共同决定(如数据库实体类的主键)。

示例代码
public class Person {private String id;private String name;// 构造方法、Getter/Setter 省略@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Person person = (Person) o;return Objects.equals(id, person.id); // 根据 id 判断是否相等}@Overridepublic int hashCode() {return Objects.hash(id); // 基于 id 生成哈希}
}// 使用 Stream 去重
Person[] people = ...; // 自定义对象数组
List<Person> uniqueList = Arrays.stream(people).distinct().collect(Collectors.toList());

方法 2:基于对象的某个唯一属性去重(无需重写 equalshashCode

若无法修改对象类(如第三方库的类),或需根据部分字段去重,可用 Collectors.toMapTreeSet 实现。

(1) 使用 Collectors.toMap

适用场景:根据唯一键(如 id)去重,保留第一个出现的元素。

List<Person> uniqueList = Arrays.stream(people).collect(Collectors.toMap(Person::getId, // Key 提取函数(根据 id 去重)p -> p,       // Value 为对象本身(existing, replacement) -> existing // 冲突时保留已存在的元素)).values()            // 获取去重后的 Value 集合.stream().collect(Collectors.toList());
(2) 使用 TreeSet 自定义比较器

适用场景:需要根据多个字段去重,或动态指定去重规则。

List<Person> uniqueList = Arrays.stream(people).collect(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(p -> p.getId() + p.getName())))).stream().collect(Collectors.toList());

方法 3:使用 filter + 内存状态去重

适用场景:需根据动态条件去重(如去重后保留最后一个元素)。

(1) 使用 ConcurrentHashMap 维护状态
Set<String> seenIds = ConcurrentHashMap.newKeySet();
List<Person> uniqueList = Arrays.stream(people).filter(p -> seenIds.add(p.getId())) // 若 id 未出现过,保留.collect(Collectors.toList());
(2) 保留最后一个出现的元素
List<Person> uniqueList = Arrays.stream(people).collect(Collectors.toMap(Person::getId,p -> p,(oldValue, newValue) -> newValue // 冲突时保留新元素)).values().stream().collect(Collectors.toList());

总结回答

  • 直接去重:若对象重写了 equals()hashCode(),直接用 distinct()
  • 按属性去重:使用 Collectors.toMapTreeSet,根据唯一键(如 id)过滤。
  • 动态去重:通过 filter 配合内存集合(如 ConcurrentHashMap)控制去重逻辑。

关键点:明确业务中“重复”的定义(如全字段相等或部分字段相等),选择性能与代码简洁性兼顾的方案。

http://www.cadmedia.cn/news/4217.html

相关文章:

  • logo成品效果图网站百度百科怎么创建自己
  • 义乌之窗网站seo优化方案策划书
  • 外观设计公司seo公司推荐
  • 绿色食品销售网站建设设计培训学院
  • 办公室网络设计方案seo排名点击器原理
  • farfetch 购物网站营销100个引流方案
  • 天价域名排名100seo优化是什么
  • 深圳网站设计师培训学校广告投放渠道
  • 外贸网站产品分析cba排名最新排名
  • 湛江廉江网站建设搜狗网页搜索
  • 高端网站建设企业官网建设北京关键词快速排名
  • 电商网站建设实验心得湖南株洲疫情最新情况
  • 深圳市南山区住房和建设局网站百度seo关键词优化电话
  • 税务新闻网站建设的意义产品推广渠道有哪些方式
  • 郑州专业网站制作建设360推广登陆
  • 竞价推广怎么做seo推广网址
  • 葫芦岛市建设局网站比较好的网络优化公司
  • 杭州萧山门户网站建设公司互联网推广是什么工作内容
  • 建造师二级报名入口seo关键词优化费用
  • 齐河网站建设费用百度seo查询
  • 网站建设企业站模板企业网站的功能
  • 天津商城网站建设app拉新怎么对接渠道
  • 购买一个网站多少钱深圳seo排名哪家好
  • 网站建设 websitesu搜索引擎优化
  • 廊坊网站优化企业网址
  • 德州建设信息网站seo 最新
  • wordpress 电影网站模板长沙关键词优化费用
  • 黔东南州住房和城乡建设局网站广州seo诊断
  • 别人品牌的域名做网站吗专注网络营销推广公司
  • 网盘 商业网站建设案例课程 下载百度网盘24小时人工电话