假设您有一些具有多个字段的对象,可以通过以下方式进行比较:
public class Person {
private String firstName;
private String lastName;
private String age;
/* Constructors */
/* Methods */
}
Run Code Online (Sandbox Code Playgroud)
所以在这个例子中,当你问:
a.compareTo(b) > 0
Run Code Online (Sandbox Code Playgroud)
你可能会问b的姓氏是否在b之前,或者a是否早于b,等等......
在不增加不必要的混乱或开销的情况下,在这些类型的对象之间进行多重比较的最简洁方法是什么?
java.lang.Comparable 界面允许仅通过一个字段进行比较compareByFirstName(),添加大量的比较方法(例如compareByAge(),等等)是混乱的.那么最好的方法是什么呢?
如果我有一个简单的字符串列表:
List<String> stringList = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
我可以用它来分类:
Collections.sort(stringList);
Run Code Online (Sandbox Code Playgroud)
但是假设我有一个Person类:
public class Person
{
private String name;
private Integer age;
private String country;
}
Run Code Online (Sandbox Code Playgroud)
并列出一个:
List<Person> personList = new ArrayList<Person>();
Run Code Online (Sandbox Code Playgroud)
我希望有时按名字排序,有时按年龄,有时按国家排序.
最简单的方法是什么?
我知道我可以实现Comparable接口,但这似乎限制我按一个特定属性对其进行排序.
我上课了
public class StudentVO {
int age;
String name;
}
Run Code Online (Sandbox Code Playgroud)
我在两个不同的领域使用了同一个班级.在一个地方,我需要根据年龄排序.在另一个地方,我需要根据名称进行排序,在另一个地方,我可能需要根据年龄和名称进行排序.我怎样才能做到这一点?如果我可以覆盖一个字段compareTo().
是否有可能做到这一点?
我有一个包含以下变量(实体)的类:
Identifier
Entry_Number
Rest_of_the_data
Run Code Online (Sandbox Code Playgroud)
我想按如下方式对这个类的实例进行排序:
按Identifier变量对实例进行Identifier排序,然后对于具有相同值的实例,按变量对它们进行排序Entry_Number.
我知道我可以将这些实体中的一个实现Comparable作为关键,但我不知道如何对这两个实体进行顺序排序.
也就是说,在按Identifier我排序的时间排序之后Entry_Number,不应该干扰初始排序 - 第二次排序应该仅适用于具有相同Identifier值的那些实例.
所以,实际上,我希望能够传递"第二个关键"项来解决关系.