Java 比较对象

Java 比较对象,java,compare,Java,Compare,我有一个表单,允许用户输入有关地址信息的值。 我想将从用户那里得到的值与存储在数据库地址表中的信息进行比较。 我有一个实体类 public class Address { private String gevernate; private int homeNo; private String neighborhood; private String street; } 它在数据库中表示为一个名为ADDRESS的表 这个类有一个view对象,它返回db tabel中的所有地址值

我有一个表单,允许用户输入有关地址信息的值。 我想将从用户那里得到的值与存储在数据库地址表中的信息进行比较。 我有一个实体类

public class Address {
  private String gevernate;
  private int homeNo;
  private String neighborhood;
  private String street;
} 
它在数据库中表示为一个名为ADDRESS的表

这个类有一个view对象,它返回db tabel中的所有地址值

public static Address getAddress(Connection Con, long stdID) {
// select stamatment and result set object.
}
我面临的问题是,表单可能不包含Address对象的所有值,它可能只包含2或3个值,它是在运行时指定的。如何比较两个对象?

为地址对象定义/覆盖equals()和hashcode()。比较如下:

address1.equals(address2)
为Address对象定义/重写equals()和hashcode()。比较如下:

address1.equals(address2)

将equals方法添加到类中,如下所示:

public class Address {
    private String gevernate;
    private int homeNo;
    private String neighborhood;
    private String street;

public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    Address other = (Address) obj;
    if (gevernate == null) {
        if (other.gevernate != null)
            return false;
    } else if (!gevernate.equals(other.gevernate))
        return false;
    if (homeNo != other.homeNo)
        return false;
    if (neighborhood == null) {
        if (other.neighborhood != null)
            return false;
    } else if (!neighborhood.equals(other.neighborhood))
        return false;
    if (street == null) {
        if (other.street != null)
            return false;
    } else if (!street.equals(other.street))
        return false;
    return true;
}
}

将equals方法添加到类中,如下所示:

public class Address {
    private String gevernate;
    private int homeNo;
    private String neighborhood;
    private String street;

public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    Address other = (Address) obj;
    if (gevernate == null) {
        if (other.gevernate != null)
            return false;
    } else if (!gevernate.equals(other.gevernate))
        return false;
    if (homeNo != other.homeNo)
        return false;
    if (neighborhood == null) {
        if (other.neighborhood != null)
            return false;
    } else if (!neighborhood.equals(other.neighborhood))
        return false;
    if (street == null) {
        if (other.street != null)
            return false;
    } else if (!street.equals(other.street))
        return false;
    return true;
}
}

我将称之为伪代码,因为我不懂Java:

if (this.gevernate != other.gevernate && this.gevernate != null && other.gevernate != null)
{
    // If both "gevernate" members are valid, but unequal...
    return false;
}

else if (this.homeNo != other.homeNo && this.homeNo != null && other.homeNo != null)
{
    // Repeat for "homeNo" values.
    return false;
}

// Repeat for the other two members.

else return true;

我将称之为伪代码,因为我不懂Java:

if (this.gevernate != other.gevernate && this.gevernate != null && other.gevernate != null)
{
    // If both "gevernate" members are valid, but unequal...
    return false;
}

else if (this.homeNo != other.homeNo && this.homeNo != null && other.homeNo != null)
{
    // Repeat for "homeNo" values.
    return false;
}

// Repeat for the other two members.

else return true;

我将创建一个完全独立的类来进行比较,因为它们可能涉及特殊的逻辑和运行时配置。随着应用程序的增长,它可能涉及一些非常复杂的内容,如匹配状态(
NY
newyork
),等等

不要为此使用
equals()
,这应该是对Java集合和通用“此对象是否完全相同”问题有意义的任何实现

基本思想:

int studentId = /* something */;
Connection conn = /* something */;
AddressForm form = /* something */;
Address userEnteredAddress = form.getEnteredAddress();
Address storedAddress = Address.getAddress(connection,studentId);
MyAddressComparer comp = new MyAddressComparer(form);
boolean similarEnough = comp.doMyVagueComparison(storedAddress,userEnteredAddress);

这取决于
AddressComparer
中的代码,根据表单的配置,找出它需要应用哪些规则,并执行所有这些特殊用途的小技巧。

我将创建一个完全独立的类来进行比较,因为它们可能涉及特殊的逻辑和运行时配置。随着应用程序的增长,它可能涉及一些非常复杂的内容,如匹配状态(
NY
newyork
),等等

不要为此使用
equals()
,这应该是对Java集合和通用“此对象是否完全相同”问题有意义的任何实现

基本思想:

int studentId = /* something */;
Connection conn = /* something */;
AddressForm form = /* something */;
Address userEnteredAddress = form.getEnteredAddress();
Address storedAddress = Address.getAddress(connection,studentId);
MyAddressComparer comp = new MyAddressComparer(form);
boolean similarEnough = comp.doMyVagueComparison(storedAddress,userEnteredAddress);


这取决于
AddressComparer
中的代码根据表单的配置来确定需要应用哪些规则,并执行所有这些特殊用途的小技巧。

如果有,上面的字段中有一个是与数据库中的地址表关联的主键索引的一部分?如果一个地址包含的值与另一个不同,如何比较它们?换句话说,你如何确定
123 Drury La.,Funky Town
123 Drury La.,Funky Town,CA
相同?STDID号码,地址与学生有关。@Maxpm,这正是我的意思,我想有一些想法来进行比较。为了澄清:这实际上与数据库或表单没有任何特定关系,您只需要根据其中的数据子集将两个
Address
对象一起比较,而您不知道在编译时该子集将是什么?如果有的话,上面的字段中有一个是与数据库中的地址表关联的主键索引的一部分?如果一个地址包含的值与另一个不同,如何比较它们?换句话说,你如何确定
123 Drury La.,Funky Town
123 Drury La.,Funky Town,CA
相同?STDID号码,地址与学生有关。@Maxpm,这正是我的意思,我想有一些想法来进行比较。为了澄清:这实际上与数据库或表单没有任何特定关系,您只需要根据其中的数据子集将两个
Address
对象一起进行比较,您不知道在编译时该子集是什么?where define意味着
override
where define意味着
override
如果一个地址定义了gevernate、homeNo,另一个地址定义了邻居和街道,您将如何比较这两个地址?这也适用于此。在进行累计检查之前,它首先检查null=null,这样您就不必担心遍历每个属性是个好主意,我想,我现在正在尝试,我希望它能工作。getClass()方法返回什么?如果有gevernate,您会如何比较两个地址,homeNo和另一个定义了邻居和街道?这也适用于此。在进行累计检查之前,它首先检查null=null,这样您就不必担心遍历每个属性是个好主意,我想,我现在正在尝试,我希望它能工作。getClass()方法返回什么?是的,将类与比较分开比重写等于方法要好。但实际上,使用集合对我来说并不清楚。遍历每个属性的方法非常清楚。是的,将类与比较分开比重写等于方法要好。但实际上,使用集合对我来说并不清楚。遍历每个属性的方法非常清楚。