• 如何在一个对象的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);
        }
    }

     测试结果:

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

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

  • 相关阅读:
    POJ3320 Jessica's Reading Problem
    POJ3320 Jessica's Reading Problem
    CodeForces 813B The Golden Age
    CodeForces 813B The Golden Age
    An impassioned circulation of affection CodeForces
    An impassioned circulation of affection CodeForces
    Codeforces Round #444 (Div. 2) B. Cubes for Masha
    2013=7=21 进制转换
    2013=7=15
    2013=7=14
  • 原文地址:https://www.cnblogs.com/ouyanxia/p/15775819.html
Copyright © 2020-2023  润新知