Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检查对象列表中的重复值_Java_Spring Mvc_Java 6 - Fatal编程技术网

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

Java 如何检查对象列表中的重复值,java,spring-mvc,java-6,Java,Spring Mvc,Java 6,我有一个SpringMVC应用程序,需要保存一个人员列表。不过,我需要检查他们的姓名、姓氏和年龄是否相同 名单上的人。如果存在相同的问题,那么我应该阻止用户保存数据 Person类具有以下属性: int id, String name ,String surname,int age -- with getters and setters 我还有一个类调用GroupModel,其中包含一个人员列表,如下所示: List <Person> persons = new ArrayList

我有一个SpringMVC应用程序,需要保存一个人员列表。不过,我需要检查他们的姓名、姓氏和年龄是否相同 名单上的人。如果存在相同的问题,那么我应该阻止用户保存数据 Person类具有以下属性:

int id, String name ,String surname,int age -- with getters and setters
我还有一个类调用GroupModel,其中包含一个人员列表,如下所示:

List <Person> persons = new ArrayList<Person>();
List persons=new ArrayList();
因此,现在我需要检查用户试图保存以下列表的以下场景:

如果我在人员列表中有3人:

  • 人员1:id:1姓名:约翰姓氏:乔年龄:21
  • 人员2:id:2姓名:Ryan姓氏:Ter年龄:23
  • 人员3:id:3姓名:约翰姓氏:乔年龄:21
我需要检查是否存在重复,在这种情况下,人员1和人员3是相同的,然后停止用户保存列表。
那么,您知道在这种情况下如何执行重复检查吗?

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

覆盖方法
布尔等于(对象obj)
。如果对象上的“姓名”、“姓氏”和“年龄”字段相同,并且对象为Person实例,则此方法应返回true。 然后从列表类调用布尔包含(对象o)方法。此方法将检查列表是否包含对象,该对象等于作为参数给定的对象

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

package stackoverflow.q_24935480;
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
导入java.util.HashSet; 导入java.util.Set; 公共类TestPersonSet{ 公共静态void main(字符串[]args){ Set s=新的HashSet(); 人员p1=新人员();p1.setName(“abc”); Person p2=新的Person();p2.setName(“abc”); s、 添加(p1); s、 添加(p2); System.out.println(“设置大小为”+s.size()); } 静态类人{ 私有字符串名称; 公共void集合名(字符串名){ this.name=名称; } @凌驾 公共int hashCode(){ 最终整数素数=31; int结果=1; result=prime*result+((name==null)?0:name.hashCode(); 返回结果; } @凌驾 公共布尔等于(对象obj){ if(this==obj) 返回true; if(obj==null) 返回false; 如果(getClass()!=obj.getClass()) 返回false; 人员其他=(人员)obj; if(name==null){ if(other.name!=null) 返回false; }如果(!name.equals(other.name)) 返回false; 返回true; } } } //输出: //设置大小为1
从列表中创建一个集合,查看其长度是否相同。如果没有正确地为Person实现equals,请从名称或ID创建一个集合,并将其进行比较。
Person中的override
equals()
hashCode()
class@tobias_k告诉你正确答案用集合代替列表。重写Person类中的equals()方法,该方法将检查姓名、姓氏和年龄。@NikhilJoshi-如果他重写
equals()