我有一个Spring MVC应用程序,我需要保存一份人员列表。但是我需要检查名称,姓氏和年龄是否相同 人名单。如果有相同的话我应该阻止用户保存数据 Person 类具有以下属性:
int id, String name ,String surname,int age -- with getters and setters
我有另一个类调用 GroupModel ,其中包含Person列表,如下所示:
List <Person> persons = new ArrayList<Person>();
所以现在我需要检查用户试图保存以下列表的以下场景:
如果我在人员名单中有3个人:
我需要检查复制,在这种情况下,Person 1和Person 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