如何在一个对象的List<Object>的List中去除连续重复值?

 

我们先简单来看一下两个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);
    }
}

 测试结果:

 

注意:这里因为是有对象的引用,所以顺序去重的方式会把前一个值修改了,导致后续的去重都出错。

因此采用了倒序去重的方式,就可以避免前一个值被修改,后一个值需要去重的问题。

 

posted on 2022-01-07 16:56  依米欧  阅读(405)  评论(0编辑  收藏  举报