我们先简单来看一下两个list如何去除重复值:
1.如果只是在两个数组或者多个数组之间去除重复,直接用removeAll()即可;
list1={A,B,C,D}
list2={A,B,C,D,E,F}
要求:从list2中去除与list1重复的值
结果:{E,F}
public class ListRemoveTest { public static void main(String[] args) { List<String> list1 = new ArrayList<>(); list1.add("A"); list1.add("B"); list1.add("C"); list1.add("D"); List<String> list2 = new ArrayList<>(); list2.add("C"); list2.add("D"); list2.add("E"); list2.add("F"); list2.removeAll(list1); System.out.println(list2); } }
2、如何在一个对象的List<Object>的List中去除连续重复值?
这里举个例子对象的List<Object>的List:需要将消费者中连续的用户的名字去重
对象:Consumer.java
public class Consumer {
private List<Person> persons;
public void setPersons(List<Person> persons) {
this.persons = persons;
}
public List<Person> getPersons() {
return persons;
}
static class Person {
private List<String> name;
public void setName(List<String> name) {
this.name = name;
}
public List<String> getName() {
return name;
}
}
Test.java
Public class Test {
public static void main(String[] args) {
Consumer consumer = new Consumer();
List<Person> personList = new ArrayList<>();
Person person = new Person();
List<String> name = new ArrayList<>();
name.add("A");
name.add("B");
name.add("C");
name.add("D");
person.setName(name);
Person person2 = new Person();
List<String> name2 = new ArrayList<>();
name2.add("C");
name2.add("D");
name2.add("E");
name2.add("F");
person2.setName(name2);
personList.add(person);
personList.add(person2);
consumer.setPersons(personList);
filter(consumer);
}
private static void filter(Consumer consumer) {
List<Person> personList = consumer.getPersons();
for (int i = personList.size() -1; i>0; i--) {
List<String> name1 = personList.get(i).getName();
List<String> name0 = personList.get(i - 1).getName();
name1.removeAll(name0);
}
System.out.println(personList);
}
}
测试结果:
注意:这里因为是有对象的引用,所以顺序去重的方式会把前一个值修改了,导致后续的去重都出错。
因此采用了倒序去重的方式,就可以避免前一个值被修改,后一个值需要去重的问题。