如何检查对象列表中的重复值

时间:2014-07-24 13:44:39

标签: java spring-mvc java-6

我有一个Spring MVC应用程序,我需要保存一份人员列表。但是我需要检查名称,姓氏和年龄是否相同 人名单。如果有相同的话我应该阻止用户保存数据 Person 类具有以下属性:

int id, String name ,String surname,int age -- with getters and setters

我有另一个类调用 GroupModel ,其中包含Person列表,如下所示:

List <Person> persons = new ArrayList<Person>();

所以现在我需要检查用户试图保存以下列表的以下场景:

如果我在人员名单中有3个人:

  • 人1:身份证:1,姓名:John姓:Joe年龄:21
  • Person 2:id:2,姓名:Ryan Surname:Ter年龄:23​​
  • 人3:id:3,姓名:John姓:Joe年龄:21

我需要检查复制,在这种情况下,Person 1和Person 3是相同的,然后阻止用户保存列表。 所以,在这种情况下,我该如何进行复制检查呢?

3 个答案:

答案 0 :(得分:1)

equals实施hashCode(和Person),因此如果3个属性相等,则两个对象相等。然后,从Set创建一个临时ArrayList。如果集合中的元素少于列表,则表示重复。

答案 1 :(得分:0)

覆盖方法boolean equals(Object obj)。如果字段:name,surname和age在对象和对象上都是相同的,则此方法应该返回true将是instanceOf Person。 然后从List类中调用boolean contains(Object o)方法。此方法将检查您的列表是否包含对象,该对象等于以parametr。给出的对象。

我认为这是最好的方式之一。

答案 2 :(得分:0)

package stackoverflow.q_24935480;

import java.util.HashSet;
import java.util.Set;

public class TestPersonInSet {
    public static void main(String[] args) {
        Set<Person> s = new HashSet<Person>();
        Person p1 = new Person(); p1.setName("abc");
        Person p2 = new Person(); p2.setName("abc");
        s.add(p1);
        s.add(p2);
        System.out.println("Set size is " + s.size());
    }

    static class Person {
        private String name;

        public void setName(String name) {
            this.name = name;
        }

        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((name == null) ? 0 : name.hashCode());
            return result;
        }

        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            Person other = (Person) obj;
            if (name == null) {
                if (other.name != null)
                    return false;
            } else if (!name.equals(other.name))
                return false;
            return true;
        }

    }
}

//Output: 
//Set size is 1