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

     测试结果:

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

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

  • 相关阅读:
    [LeetCode]String主题系列{第5,6题}
    [LeetCode]Math主题系列{第7,9,13,273题}
    [LeetCode]LinkedList主题系列{第2题}
    [LeetCode]HashTable主题系列{第3,36,49,94,136,138,187,202,204,205,290,347,389,409,438,451,463,500,508,560,594,599题}
    由于博客园的道路越来越像CSDN了,已经不再是当年的博客园了,决定退出博客园,后续建立自己的博客站点。
    Revit二次开发——非模态窗口的事件处理
    Revit二开---Schemachema扩展数据
    Revit二开---ViewFamily视图类型枚举
    CAD二开---扩展数据XData
    CAD二开---框选文字批量对齐
  • 原文地址:https://www.cnblogs.com/ouyanxia/p/15775819.html
Copyright © 2020-2023  润新知