由于开发中遇到了集合中筛选重复字符串或对象的操作,下面记录几种常用的方法,以备后续查询使用,直接上代码,

/*** list去掉重复元素* * @param datas* @return*/public static List<String> getNoDuplicate1(List<String> datas) {List<String> res = new ArrayList<String>();for (String single : datas) {if (res.contains(single)) {continue;}res.add(single);}return res;}/*** 利用set进行去重* * @param datas* @return*/public static List<String> getNoDuplicate2(List<String> datas) {Set<String> targets = new HashSet<String>();List<String> res = new ArrayList<String>();for (String single : datas) {if (targets.add(single)) {res.add(single);}continue;}return res;}/*** set和list转换去重* * @param datas* @return*/public static List<String> getNoDuplicate3(List<String> datas) {Set<String> sets = new HashSet<String>();List<String> res = new ArrayList<String>();sets.addAll(datas);res.addAll(sets);return res;}/*** java8去重* * @param datas* @return*/public static List<Object> getNoDuplicate4(List<String> datas) {List<Object> res = datas.stream().distinct().collect(Collectors.toList());return res;}/*** 对象去重* @param users* @return*/public static ArrayList<User> removeDuplicateUser(List<User> users) {Set<User> personSet = new TreeSet<User>(new Comparator<User>() {public int compare(User o1, User o2) {return o1.getUserName().compareTo(o2.getUserName());}});personSet.addAll(users);return new ArrayList<User>(personSet);}/*** 双重for循环对对象去重* @param users* @return*/public static List<User> removeDuplicateRecr(List<User> users) {List<User> res = users;for (int i = 0; i < users.size()-1; i++) {for (int j = users.size()-1; j > i; j--) {if (users.get(j).getId() == users.get(i).getId()) {users.remove(j);}}}return res;}/*** 利用set不能重复的特性进行去重操作* @param datas* @return*/public static List<User> removeDupObjElementBySet(List<User> datas) {Set<String> targets = new HashSet<String>();List<User> res = new ArrayList<User>();for (Usersingle : datas) {if (targets.add(single.getId())) {  //如果可以加进去,说明没有重复targets.add(single.getId());res.add(single);}continue;}return res;}/*** 利用对象的hashCode码不相同进行去重* @param datas* @return*/public static List<User> removeDupObjElementByHash(List<User> datas) {Set<Integer> targets = new HashSet<Integer>();List<User> res = new ArrayList<User>();for (Usersingle : datas) {if (targets.add(single.hashCode())) {  //如果可以加进去,说明没有重复targets.add(single.hashCode());res.add(single);}continue;}return res;}/*** 对象去重,java8写法* @param persons* @return*/public static List<User> removeDupliByName(List<User> persons) {Set<User> personSet = new TreeSet<User>((o1, o2) -> o1.getUserName().compareTo(o2.getUserName()));personSet.addAll(persons);return new ArrayList<User>(personSet);}/*** 对象去重* @param persons* @return*/public static List<User> removeDupliByName2(List<User> persons) {List<User> personList = new ArrayList<>();persons.stream().forEach(p -> {if (!personList.contains(p)) {personList.add(p);}});System.out.println(personList);return personList;}/*** 利用反射并通过获取属性和属性值的md5进行去重* @param datas* @return*/public static List<MdManageTree> removeDupElementByMd5(List<MdManageTree> datas){Set<String> tems = new HashSet<>();List<MdManageTree> resList = new ArrayList<>();for(MdManageTree single : datas){String elePropertyNameAndValue = reflectObject(single);if(tems.add(strToMd5(elePropertyNameAndValue))){    //如果可以加进去,说明没有重复tems.add(strToMd5(elePropertyNameAndValue));resList.add(single);}continue;}return resList;}/*** 获取字符串md5* @param str* @return*/public static String strToMd5(String str)  {MessageDigest md5 = null;try {md5 = MessageDigest.getInstance("MD5");} catch (NoSuchAlgorithmException e) {e.printStackTrace();logger.error("获取MD5对象失败");}try {md5.update((str).getBytes("UTF-8"));} catch (UnsupportedEncodingException e) {e.printStackTrace();logger.error("MD5转换字节数组失败");}byte b[] = md5.digest();int i;StringBuffer buf = new StringBuffer("");for(int offset=0; offset<b.length; offset++){i = b[offset];if(i<0){i+=256;}if(i<16){buf.append("0");}buf.append(Integer.toHexString(i));}return buf.toString();}/*** java反射获取对象的属性值不为空的字符串拼接值* @param obj* @return* @throws Exception*/public static String reflectObject(Object obj) {Field[] field = obj.getClass().getDeclaredFields();String result = "" ;try{for (int j = 0; j < field.length; j++) {String name = field[j].getName();name = name.substring(0, 1).toUpperCase() + name.substring(1);Method m = obj.getClass().getMethod("get" + name);String value = (String) m.invoke(obj);if (value != null) {result += name + value;} else {continue;}}}catch (Exception e){e.printStackTrace();}return result.trim();}public static void main(String[] args) {List<String> nodes = new ArrayList<String>();nodes.add("zhangsan");nodes.add("lisi");nodes.add("wangwu");nodes.add("zhaoliu");nodes.add("lisi");List<User> res = new ArrayList<User>();User user1 = new User();user1.setUserId(1);user1.setUserName("zhangsan");user1.setPassWord("456");res.add(user1);User user2 = new User();user2.setUserId(2);user2.setUserName("lisi");user2.setPassWord("345");res.add(user2);User user3 = new User();user3.setUserId(3);user3.setUserName("wangwu");user3.setPassWord("778");res.add(user3);User user4 = new User();user4.setUserId(1);user4.setUserName("zhangsan");user4.setPassWord("456");res.add(user4);//System.out.println(getNoDuplicate1(nodes));//System.out.println(getNoDuplicate2(nodes));//System.out.println(getNoDuplicate3(nodes));//System.out.println(getNoDuplicate4(nodes));//System.out.println(removeDuplicateUser(res));System.out.println(removeDupliByName2(res));}

user对象为:

 private long userId;private String userName;private String passWord;public long getUserId() {return userId;}public void setUserId(long userId) {this.userId = userId;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassWord() {return passWord;}public void setPassWord(String passWord) {this.passWord = passWord;}@Overridepublic boolean equals(Object o) {if(this == o)return true;if (o == null || getClass() != o.getClass()) return false;User user = (User) o;return Objects.equals(userName, user.getUserName()) && Objects.equals(passWord, user.getPassWord());}@Overridepublic String toString() {return "User [userId=" + userId + ", userName=" + userName + ", passWord=" + passWord + "]";}

实际使用中,equals方法可以根据自己需要重新定义;

可以作为工具类直接使用,已经经过测试了,可放心使用。

java集合对字符串或对象去重相关推荐

  1. JAVA集合与字符串转换

    JAVA集合与字符串转换 集合与字符串转换 集合与字符串转换 这里面包含的内容麻雀虽小五脏俱全,常用的一些java遍历,JDK1.8新特性实用,任意对象排序分组,字符串切割,集合切割,字符串转集合,集 ...

  2. JAVA集合和字符串互转

    JAVA集合和字符串互转 1.导入StringUtils的依赖包 2.字符串转集合 3.集合转字符串 1.导入StringUtils的依赖包 <dependency><groupId ...

  3. JAVA集合框架之List HashSet去重及TreeSet排序详解

    无图言屌!先上图 说到List去重,很多人都知道用contains()方法,其实contains()方法依据的equals()方法,比较两个对象的引用是否相同,如果要List比较两个自定义定义对象是否 ...

  4. java集合转字符串拼接_关于集合和字符串的互转实现方法

    今天在写项目的时候遇到一个问题,就是要把得到的一个集合转换成字符串,发现 import org.apache.commons.lang.stringutils; 有这么一个简单的方法:string s ...

  5. java集合转字符串_关于集合和字符串的互转实现方法

    今天在写项目的时候遇到一个问题,就是要把得到的一个集合转换成字符串,发现 import org.apache.commons.lang.StringUtils; 有这么一个简单的方法:String s ...

  6. java集合光加_阳光沙滩-java集合:使用新建对象检查数组是否包含问题

    这样的问题很简单的,就算我从来没有学过java,我也可以找到答案. 第一种方法,看注释: /** * Returns true if this list contains the specified ...

  7. Java项目Json字符串转对象,去斜杠

    1.通过前端存储到数据库的json对象都会带转义符,而普通的json转对象再强转对象是有问题的,这时候就需要我们通过fastJson来完成去除转义符,转成json对象,这样就不会报错了. 2.通过fa ...

  8. java集合转字符串,Java集合将字符串转换为字符列表

    I would like to convert the string containing abc to a list of characters and a hashset of character ...

  9. 笔记整理2----Java语言基础(二)06 断点调试与数据加密+07 面向对象-类与对象+08 java常用API-基础+09 java集合+10 IO流-基础

    06 断点调试与数据加密+07 面向对象-类与对象+08 java常用API-基础+09 java集合+10 IO流-基础 第06天 java基础语法 今日内容介绍  Eclipse断点调试  基 ...

最新文章

  1. IASetIndexBuffer Offset
  2. Python安装模块出错(No module named setuptools)解决方法
  3. 有高级计算机证可以入户东莞吗,本科有学位或有高级职称,2019年可以入户东莞吗?...
  4. java迪杰斯特拉算法_迪杰斯特拉算法完整代码(Java)
  5. Windows 10 安装 scrapy 步骤
  6. java jpa面试题_jpa面试题解析,java面试题
  7. 五类推荐系统算法,非常好使,非常全面
  8. css+div透明参数设置
  9. 怎么布置mysql数据库_MySQL数据库的安装,配置
  10. linux勒索病毒分析,永恒之蓝的勒索病毒tasksche.exe样本分析
  11. Matlab中产生门函数----Heaviside函数的调用方法
  12. 使用C#编写17种Hello World程序(初学者C#测试石)
  13. 微软“匈牙利”法程序标示符命名规则
  14. Ubuntu 18.04 新手教程_火狐浏览器flash插件安装
  15. 判断一个数是否为整数、正整数、小数通用算法
  16. 运算符之 --- 取余运算 %
  17. windows清理8080端口
  18. Android jetpack 篮球计分板的实现
  19. nfc标签 方案 防伪_酒类NFC防伪解决方案
  20. ping指定包大小的命令格式(windows linux)

热门文章

  1. 再学 GDI+[94]: TGPImage(14) - 增减图像的红、绿、蓝三色的成分
  2. scaleType属性设置!
  3. IPsec   在企业网中的应用
  4. 《虚拟化与云计算》读书感(九)服务器虚拟化的其他核心技术
  5. flask_script扩展包的作用
  6. ALC--软件定义架构的PLC
  7. FL Studio常见问题之通道窗口和步进音序器的设置
  8. [转] Mac os x 使用ftp
  9. 局域网ARP病毒的清理
  10. 互联网公司们眼中的最强quot;世界杯阵容quot;