当前位置: 首页 > 面试题库 >

Java 如何按多个字段比较对象

谷森
2023-03-14
问题内容

假设你有一些具有多个字段的对象,可以通过以下方式进行比较:

public class Person {

    private String firstName;
    private String lastName;
    private String age;

    /* Constructors */

    /* Methods */

}

因此,在此示例中,当你询问是否:

a.compareTo(b) > 0

你可能会问a的姓氏是否早于b的姓氏,或者a是否早于b,等等。

在这些对象之间进行多重比较而不增加不必要的混乱或开销的最干净的方法是什么?

  • java.lang.Comparable界面仅允许一个字段进行比较
  • 在我看来compareByFirstName(),添加许多比较方法(即,compareByAge()等)比较混乱。
    那么最好的方法是什么?

问题答案:

你可以实现Comparator比较两个Person对象的,并且可以根据需要检查任意多个字段。你可以在比较器中放入一个变量,以告知要与哪个字段进行比较,尽管编写多个比较器可能会更简单



 类似资料:
  • 问题内容: 我有5个字段的对象: 要排序的的我写了下面。 这是在具有多个要比较的对象的对象上实现的正确方法吗? 问题答案: 您的方法可能是正确的,但是效率低下(不必要地调用equals)并且难以阅读。可以这样重写: 更好的方法是使用库方法将所有这些逻辑抽象掉,这样您就不必考虑它了。例如使用apache.commons.lang CompareToBuilder

  • 问题内容: 我有两个从同一类实例化的java对象。 如果我将它们的两个属性都设置为完全相同的值,然后验证它们是否相同 但是,这些方法都不返回真实值。我已经检查了每个属性,并且它们匹配。 如何比较这两个对象以验证它们是否相同? 问题答案: 你需要提供自己的实现。 如果哈希表中有可能使用你的对象,则还应该重写。一个合理的实施将是该对象的字段的哈希码喜欢的东西结合起来:

  • 问题内容: 我想知道如何在一行中比较多个字符串。我尝试使用|| 但不适用于布尔值或字符串。这是我的代码是什么样的: 对于那些将其标记为重复的对象,我在此处检查了200多个关于堆栈溢出的问题,但没有一个起作用。@Chrylis发布的一个实际上没有帮助。他们只是在问==和.equals()的区别 问题答案: 首先,不要用于字符串。稍后您将了解原因。您想按字符串的内容而不是它们在内存中的位置比较字符串。

  • 我想断言,相同类型的两个对象列表在该对象的属性值方面是相同的。例如,我有两个Person对象列表,它们具有名字、姓氏和中间名属性。每个Person对象都有这些属性(java bean)的方法setter和getter,构造函数不包含任何参数。 让我们假设这里已经有一个名为existingPersonList的两个人的列表,该列表具有以下属性: 现有人员1:firstName=鲍勃,lastName

  • 问题内容: 从这个原始问题开始,我将如何对多个字段进行排序? 使用这种略微适应的结构,我该如何对城市(升序)和价格(降序)进行排序? 我喜欢这个事实,而不是给出一个提供通用方法的答案。在计划使用此代码的地方,我将必须对日期以及其他内容进行排序。“灌注”物体的功能似乎很方便,即使有点麻烦。 我试图将这个答案构建成一个很好的通用示例,但是我运气不高。 问题答案: 这是一个“优化”版本。它进行了更多的预

  • 我有两个对象数组: