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

app开发模板网站山西大同企业做网站

app开发模板网站,山西大同企业做网站,公司怎么做网络营销,东莞手机网站制作背景 在Java开发过程中,我们经常会遇到需要对List进行去重的需求。 其中常见的情况是,将数组去重,或者将对象依据某个字段去重。这两种方式均可用set属性进行处理。 今天讨论,有一个List,且其中的元素是自定义的对象&…

背景

在Java开发过程中,我们经常会遇到需要对List进行去重的需求。
其中常见的情况是,将数组去重,或者将对象依据某个字段去重。这两种方式均可用set属性进行处理。
今天讨论,有一个List,且其中的元素是自定义的对象,我们需要根据对象的某两个字段的值来进行去重,并得到去重后的结果。

整理过程如下:
在这里插入图片描述

方案一

1、基础准备

假设需要对人员(User)去重,依据编号(code)和名称(name)去重

2、原始LIst
List<User> userList = Arrays.asList(new User("1","张三"), new User("2","李四"), new User("2","李四"), new User("2","李四"));
3、去重

使用Java 8的Stream API来实现去重

1、使用stream()方法将List转换成Stream。
2、使用distinct()方法去除重复的元素。
3、使用collect(Collectors.toList())将去重后的Stream转换成List。
List<User> distinctList = userList.stream().distinct().collect(Collectors.toList());
4、查看去重后的数据
for (User user : distinctList) {System.out.println("编号:" + user.getCode() + ",名称:" + user.getName());
}
5、代码如下

人员(User.java)

package com;public class User {private String code;private String name;public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getName() {return name;}public void setName(String name) {this.name = name;}public User() {}public User(String code, String name) {this.code = code;this.name = name;}@Overridepublic boolean equals(Object obj) {if (this == obj) {return true;}if (obj == null || getClass() != obj.getClass()) {return false;}User other = (User) obj;return code.equals(other.code) && name.equals(other.name);}@Overridepublic int hashCode() {return Objects.hash(code, name);}}

测试类(Test .java)

package com;import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;public class Test {public static void main(String[] args) {List<User> userList = Arrays.asList(new User("1","张三"), new User("2","李四"), new User("2","李四"), new User("2","李四"));List<User> distinctList = userList.stream().distinct().collect(Collectors.toList());for (User user : distinctList) {System.out.println("编号:" + user.getCode() + ",名称:" + user.getName());}}
}
6、打印结果

在这里插入图片描述

方案二

1、使用工具类处理:

人员(User.java)

package com;import java.util.Objects;public class User {private String code;private String name;public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getName() {return name;}public void setName(String name) {this.name = name;}public User() {}public User(String code, String name) {this.code = code;this.name = name;}}

测试类(Test.java)

package com;import org.apache.commons.lang.StringUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;public class Test {public static void main(String[] args) {List<User> userList = Arrays.asList(new User("1","张三"), new User("2","李四"), new User("2","李四"), new User("2","李四"));List<User> distinctList = removeDuplicateField(userList);for (User user : distinctList) {System.out.println("编号:" + user.getCode() + ",名称:" + user.getName());}}private static List<User> removeDuplicateField(List<User> list) {Set<User> set = new TreeSet<>(new Comparator<User>() {@Overridepublic int compare(User o1, User o2) {int compareToResult = 1;if(StringUtils.equals(o1.getCode(), o2.getCode()) && StringUtils.equals(o1.getName(), o2.getName())) {compareToResult = 0; // 0:重复}return compareToResult;}});set.addAll(list);return new ArrayList<>(set);}
}

关键代码:removeDuplicateField

2、结果

在这里插入图片描述

3、拓展

如上removeDuplicateField方法,可将该方法通过反射,修改成动态通用方法。
JAVA通过反射获取和设置Bean属性(总结):https://blog.csdn.net/qq_38254635/article/details/115520411

Java通过反射机制,动态设置对象属性值:https://blog.csdn.net/qq_38254635/article/details/115765808
也就说说,可将compare中的比较方法,通过注解及反射的方式处理,获取Field的注解,根据固定注解进行比较处理,这样可将removeDuplicateField完善成可配置方法。

弊端:如果使用场景较多,可采用配置的方式,如情况单一,从性能方面考虑,建议单独建立比较方法。

参考链接:

1、https://blog.51cto.com/u_16175434/7631997
2、https://code84.com/850204.html

如有不正确之处,还望指正!书写不易,觉得有帮助就点个赞吧!☺☺☺

http://www.yayakq.cn/news/59175/

相关文章:

  • 网站空间分销wordpress评论验证码
  • 怎么自己制作网站平台网站标题 没有排名
  • 装修设计那个网站好铁门关网站建设
  • 外贸电子商务网站窝窝在线观看
  • 推荐几个的网站为什么选择当网站设计人员
  • 做网站石材推销wordpress lamp lnmp
  • 做网站导航栏目怎么做网站建设行业 知乎
  • 如何给网站绑定域名又拍云 cdn WordPress
  • 《网站设计与建设》电子书鞍山在百度做个网站多少钱
  • 怎么给钓鱼网站做防红外贸做平台好还是自己建网站好
  • phpcms 网站名称标签国外专业做汽配的网站
  • 湖北做网站推广提供常州网站建设公司
  • 欢迎访问中国建设银行网站个人客户淘宝客网站设计
  • icp网站快速备案青岛港货物跟踪查询
  • 电子商务成功网站的案例长沙互联网企业
  • 公司网站的后台h5网站设计欣赏
  • 青岛专业做商业房的网站网站服务器端口号是什么
  • 网站开发概要设计书模板网站建设品牌
  • 驻马店专业做网站公司微商商城官网
  • 天河网站建设公司排名网页设计html基础代码
  • 做音乐网站要求珠海网站建设招聘
  • 谷歌网站排名搜索引擎平台有哪些
  • 自己做网站排名好吗海口网站建设方案报价
  • 射阳建设网站对网站域名销户怎么做
  • 长白山开发建设集团网站wordpress排除分类
  • 网站平台建设制度网站建设 百度推广
  • 怎样做网站搜索推广电话成都临漳 网站建设
  • 网站空间没有续费WordPress仿站培训
  • 网站建设与搜索引擎营销的关系建网站那种服务器好
  • 高端品牌网站建设需要注意什么做计算机网站