java集合对字符串或对象去重
由于开发中遇到了集合中筛选重复字符串或对象的操作,下面记录几种常用的方法,以备后续查询使用,直接上代码,
/*** 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集合对字符串或对象去重相关推荐
- JAVA集合与字符串转换
JAVA集合与字符串转换 集合与字符串转换 集合与字符串转换 这里面包含的内容麻雀虽小五脏俱全,常用的一些java遍历,JDK1.8新特性实用,任意对象排序分组,字符串切割,集合切割,字符串转集合,集 ...
- JAVA集合和字符串互转
JAVA集合和字符串互转 1.导入StringUtils的依赖包 2.字符串转集合 3.集合转字符串 1.导入StringUtils的依赖包 <dependency><groupId ...
- JAVA集合框架之List HashSet去重及TreeSet排序详解
无图言屌!先上图 说到List去重,很多人都知道用contains()方法,其实contains()方法依据的equals()方法,比较两个对象的引用是否相同,如果要List比较两个自定义定义对象是否 ...
- java集合转字符串拼接_关于集合和字符串的互转实现方法
今天在写项目的时候遇到一个问题,就是要把得到的一个集合转换成字符串,发现 import org.apache.commons.lang.stringutils; 有这么一个简单的方法:string s ...
- java集合转字符串_关于集合和字符串的互转实现方法
今天在写项目的时候遇到一个问题,就是要把得到的一个集合转换成字符串,发现 import org.apache.commons.lang.StringUtils; 有这么一个简单的方法:String s ...
- java集合光加_阳光沙滩-java集合:使用新建对象检查数组是否包含问题
这样的问题很简单的,就算我从来没有学过java,我也可以找到答案. 第一种方法,看注释: /** * Returns true if this list contains the specified ...
- Java项目Json字符串转对象,去斜杠
1.通过前端存储到数据库的json对象都会带转义符,而普通的json转对象再强转对象是有问题的,这时候就需要我们通过fastJson来完成去除转义符,转成json对象,这样就不会报错了. 2.通过fa ...
- java集合转字符串,Java集合将字符串转换为字符列表
I would like to convert the string containing abc to a list of characters and a hashset of character ...
- 笔记整理2----Java语言基础(二)06 断点调试与数据加密+07 面向对象-类与对象+08 java常用API-基础+09 java集合+10 IO流-基础
06 断点调试与数据加密+07 面向对象-类与对象+08 java常用API-基础+09 java集合+10 IO流-基础 第06天 java基础语法 今日内容介绍 Eclipse断点调试 基 ...
最新文章
- IASetIndexBuffer Offset
- Python安装模块出错(No module named setuptools)解决方法
- 有高级计算机证可以入户东莞吗,本科有学位或有高级职称,2019年可以入户东莞吗?...
- java迪杰斯特拉算法_迪杰斯特拉算法完整代码(Java)
- Windows 10 安装 scrapy 步骤
- java jpa面试题_jpa面试题解析,java面试题
- 五类推荐系统算法,非常好使,非常全面
- css+div透明参数设置
- 怎么布置mysql数据库_MySQL数据库的安装,配置
- linux勒索病毒分析,永恒之蓝的勒索病毒tasksche.exe样本分析
- Matlab中产生门函数----Heaviside函数的调用方法
- 使用C#编写17种Hello World程序(初学者C#测试石)
- 微软“匈牙利”法程序标示符命名规则
- Ubuntu 18.04 新手教程_火狐浏览器flash插件安装
- 判断一个数是否为整数、正整数、小数通用算法
- 运算符之 --- 取余运算 %
- windows清理8080端口
- Android jetpack 篮球计分板的实现
- nfc标签 方案 防伪_酒类NFC防伪解决方案
- ping指定包大小的命令格式(windows linux)