JAVA 去除重复对象方法
Java 中的 Set 集合中不能储存重复元素,故经常用来进行去重操作,但是在实际操作中,我们发现 Set 集合并不能判断对象是否重复,故无法对对象直接进行去重;不过我们可以通过将对象转换成 String 存入 Set 中进行去重操作后再取出转回对象,以此达到去重的目的。
一. 引入依赖
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.41</version> </dependency>
二. 直接放入 Set 中
1. 新建 UserTest 类
也可以直接用Object类取
package com.example.demo.bean; public class UserTest { private String userName; private String interest; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getInterest() { return interest; } public void setInterest(String interest) { this.interest = interest; } @Override public String toString() { return "UserTest{" + "userName=" + userName + + ", interest=" + interest + + }; } }
2. 新建 TestControl 类
@RequestMapping(value = "/get", method = RequestMethod.GET) public JSONObject getObj() { JSONObject output = new JSONObject(); Set<UserTest> set = server.getObj(); output.put("msg", "success"); output.put("data", set); return output; }
3. 新建 TestServe 类
public Set<UserTest> getObj() { List<UserTest> list = testImpl.getObj(); Set<UserTest> set = new HashSet<>(list); return set; }
4. 新建 TestImpl 类
public List<UserTest> getObj() { return template.findAll(UserTest.class, "test2"); }
5. 测试结果
可以看到,结果中存在完全相同的两项。
三. 将对象转化后再去重
只需要将 TestServe 类中的代码稍做修改
public List<UserTest> getObj() { List<UserTest> list = testImpl.getObj(); // Set<UserTest> set = new HashSet<>(list); Set<String> set = new HashSet<>(); for (UserTest userTest: list) { set.add(JSONObject.toJSONString(userTest)); } List<UserTest> result = new ArrayList<>(); for (String s: set) { JSONObject jsonObject = JSON.parseObject(s); UserTest userTest = JSONObject.toJavaObject(jsonObject, UserTest.class); result.add(userTest); } return result; }
再测试一下
可以看到,已经没有重复数据了。