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中的所有类都扩展了class
Object
,这意味着您的
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;
    }
}