场景:
- 如果List中存储的是一些字符串,去重的时候就比较简单,直接使用java中的set集合去重即可。
- 如果List中存储的是一些是实体类,去重的时候,要根据实体类的部分属性去重,可以使用下面的方法。
举例如下:
public class TestBean {
public String name;
public String listName;
public int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getListName() {
return listName;
}
public void setListName(String listName) {
this.listName = listName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "TestBean{" +
"name='" + name + '\'' +
", listName='" + listName + '\'' +
", age=" + age +
'}';
}
}
public class test01 {
public static void main(String[] args) {
List<TestBean> list = new ArrayList<>();
TestBean testBean1 = new TestBean();
testBean1.setName("a");
testBean1.setListName("a");
testBean1.setAge(1);
TestBean testBean2 = new TestBean();
testBean2.setName("a");
testBean2.setListName("a");
testBean2.setAge(4);
TestBean testBean3 = new TestBean();
testBean3.setName("a");
testBean3.setListName("b");
testBean3.setAge(1);
TestBean testBean4 = new TestBean();
testBean4.setName("a");
testBean4.setListName("c");
testBean4.setAge(3);
TestBean testBean5 = new TestBean();
testBean5.setName("a");
testBean5.setListName("d");
testBean5.setAge(2);
list.add(testBean1);
list.add(testBean2);
list.add(testBean3);
list.add(testBean4);
list.add(testBean5);
System.out.println("原list大小:" + list.size());
for (TestBean t : list) {
System.out.println(t);
}
List<TestBean> removeDuplicateList = list.stream()
.collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getListName() + ";" + o.getName()))), ArrayList::new));
System.out.println("去重后的list大小:" + removeDuplicateList.size());
for (TestBean t : removeDuplicateList) {
System.out.println(t);
}
System.out.println("去重后按照年龄倒序后的list=======================");
removeDuplicateList.sort(Comparator.comparing(TestBean::getAge).reversed());
for (TestBean t : removeDuplicateList) {
System.out.println(t);
}
System.out.println("去重后按照年龄正序后的list=======================");
removeDuplicateList.sort(Comparator.comparing(TestBean::getAge));
for (TestBean t : removeDuplicateList) {
System.out.println(t);
}
}
}
原list大小:5
TestBean{name='a', listName='a', age=1}
TestBean{name='a', listName='a', age=4}
TestBean{name='a', listName='b', age=1}
TestBean{name='a', listName='c', age=3}
TestBean{name='a', listName='d', age=2}
去重后的list大小:4
TestBean{name='a', listName='a', age=1}
TestBean{name='a', listName='b', age=1}
TestBean{name='a', listName='c', age=3}
TestBean{name='a', listName='d', age=2}
去重后按照年龄倒序后的list=======================
TestBean{name='a', listName='c', age=3}
TestBean{name='a', listName='d', age=2}
TestBean{name='a', listName='a', age=1}
TestBean{name='a', listName='b', age=1}
去重后按照年龄正序后的list=======================
TestBean{name='a', listName='a', age=1}
TestBean{name='a', listName='b', age=1}
TestBean{name='a', listName='d', age=2}
TestBean{name='a', listName='c', age=3}