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;
}
再测试一下
可以看到,已经没有重复数据了。