Java 检查另一个实例中是否已存在对象字段
我正在创建同一对象的多个实例,我想检查两个字段,以了解它是否有重复项Java 检查另一个实例中是否已存在对象字段,java,Java,我正在创建同一对象的多个实例,我想检查两个字段,以了解它是否有重复项 public class Professor { String name; String surName; String department; // Contructors, Setter and Getters } public class DProf { String depName; private static List<Professor> profe
public class Professor {
String name;
String surName;
String department;
// Contructors, Setter and Getters
}
public class DProf {
String depName;
private static List<Professor> professors = new ArrayList<>();
// Contructors, Setter and Getters
public void addProfessor(Professor professor) {
if (containsName(professor.name) && containsSurName(professor.surName)) {
return;
} else {
professors.add(professor);
new Professor(professor);
}
}
public boolean containsName(final String name) {
return professors.stream().anyMatch(o -> o.getName().equals(name));
}
public boolean containsSurName(final String surName) {
return professors.stream().anyMatch(o -> o.getSurName().equals(surName));
}
}
公共课教授{
字符串名;
串姓;
弦乐部;
//构造函数、Setter和getter
}
公共类{
字符串名称;
私有静态列表=新的ArrayList();
//构造函数、Setter和getter
公共图书馆教授(教授){
if(containsName(教授姓名)和containsName(教授姓氏)){
返回;
}否则{
添加(教授);
新教授(教授);
}
}
公共布尔containsName(最终字符串名){
返回professors.stream().anyMatch(o->o.getName().equals(name));
}
公共布尔containsSurName(最后一个字符串姓氏){
return.stream().anyMatch(o->o.GetLastname().equals(姓氏));
}
}
编辑:当前方法,教授存储在
列表中,两种方法检查是否存在namd和姓氏您可以创建如下静态私有字段:
private static list<String> field = new ArrayList();
private static list field=new ArrayList();
在添加教授之前,您可以检查field.contains(name)
但我认为一定存在更好的模式
编辑:当你调用Professor的构造函数时,在你的列表中添加名字。我假设你的DProf
类也包含了一个Professor的列表
接口java.util.List
声明方法。如果方法参数等于列表中的一个对象,则该方法返回true。类java.lang.Object
中的方法用于确定两个对象是否相等。由于java中的所有类都扩展了classObject
,这意味着您的Professor
类继承了该方法。类Object
中方法equals(Object)
的实现是一种通用实现,因此不适合您的教授类。因此,您需要在类Professor
中重写方法equals(Object)
这是我修改过的《教授》
公共课教授{
私有字符串名称;
私家姓;
私人弦乐部;
公共教授(串名、串姓){
此(姓名、姓氏、空);
}
公共教授(字符串名称、字符串姓氏、字符串系){
this.name=名称;
this.姓氏=姓氏;
这个部门=部门;
}
公共部门(字符串部门){
部门=部门;
}
@凌驾
公共布尔等于(对象obj){
布尔值等于假;
if(教授的obj实例){
其他教授=(教授)obj;
areEqual=name.equals(其他名称)和&姓氏.equals(其他姓氏);
}
回报是平等的;
}
}
根据您的要求,如果两个Professor
实例具有相同的name
和姓氏,则类Professor
中的方法equals()
将返回true
因为你问题中的代码不是一个简单的代码,所以我对代码做了一些假设。这是我对你的DProf
课程的修改版本。请参见代码后面的注释
import java.util.ArrayList;
导入java.util.List;
导入java.util.Objects;
公共类{
私人名单教授;
字符串名称;
公共DProf(字符串名称){
对象。requirennull(名称,“空部门名称”);
depName=名称;
professors=new ArrayList();//创建教授的空列表
}
公共图书馆教授(教授){
//在这里,我想检查对象的另一个实例中是否已经存在新的Professor实例名称和姓氏
如果(!professor.contains(professor)){
教授,系(系名);
添加(教授);
}
}
公共静态void main(字符串[]args){
德普洛夫魔法=新德普洛夫(“魔法”);
教授=新教授(“Cuthbert”、“Binns”);
教授(教授);
教授=新教授(“慈善”、“布比奇”);
教授(教授);
教授=新教授(“阿不思”、“邓布利多”);
教授(教授);
}
}
我添加了一个成员professors
,因为我假设一个系有许多不同的教授与之关联。我假设,在调用addProfessor()
方法之前,教授最初不会与某个系关联。因此,我也在addProfessor()
方法中设置了教授的系。我还添加了一个main()
方法,只是为了让我能够测试运行代码以确保它成功运行。您可以在教授的课堂上添加一个equals()
方法
然后,您可以在类的内部初始化一个列表,并在其中添加您创建的每个Professor对象
class DProf {
static List<Professor> profList = new ArrayList<>();
public boolean addProfessor(Professor professor) {
for (Professor someProf : profList) {
if (professor.equals(someProf)) return false;
}
profList.add(professor);
return true;
}
}
DProf类{
静态列表profList=新的ArrayList();
公共图书馆教授(教授){
对于(someProf教授:profList){
如果(professor.equals(someProf))返回false;
}
添加(教授);
返回true;
}
}
通过这种方式,您可以检查每个Professor对象是否与现有对象匹配。其他实例存储在哪里?您必须重写equals方法以检查两个实例是否相同。我想,在内存中,我应该将它们存储在其他地方吗?@Rancio Where“在内存中”?您是否在某个地方收集了Professor
实例?请在您的问题中包含您想做什么或问题所在的更详细描述。您将t存储在哪里
class DProf {
static List<Professor> profList = new ArrayList<>();
public boolean addProfessor(Professor professor) {
for (Professor someProf : profList) {
if (professor.equals(someProf)) return false;
}
profList.add(professor);
return true;
}
}