Java 按第二个名称对列表排序,但如果第二个名称相同,则按第一个名称排序
我想构建一个方法来按第二个名称对列表进行排序,但是如果我有两个具有第二个名称的相似对象,那么我的方法只按第一个名称对相似的对象进行排序 例如,这是我的列表:Java 按第二个名称对列表排序,但如果第二个名称相同,则按第一个名称排序,java,sorting,Java,Sorting,我想构建一个方法来按第二个名称对列表进行排序,但是如果我有两个具有第二个名称的相似对象,那么我的方法只按第一个名称对相似的对象进行排序 例如,这是我的列表: List<Person> p = new ArrayList<Person>(); p.add(new Person("Konrath", "Will")); p.add(new Person("Pavol","Rower")); p.add(new Person("Abie", "Back
List<Person> p = new ArrayList<Person>();
p.add(new Person("Konrath", "Will"));
p.add(new Person("Pavol","Rower"));
p.add(new Person("Abie", "Backi"));
p.add(new Person("Bartie", "Rower"));
return p;
List p=new ArrayList();
p、 添加(新人员(“Konrath”、“Will”);
p、 添加(新人员(“Pavol”、“Rower”);
p、 添加(新人员(“Abie”、“Backi”);
p、 加上(新人(“巴蒂”、“赛艇手”);
返回p;
我想要这样的结果:
List<Person> p = new ArrayList<Person>();
p.add(new Person("Abie", "Backi"));
p.add(new Person("Bartie", "Rower"));
p.add(new Person("Pavol", "Rower"));
p.add(new Person("Konrath","Will"));
return p;
List p=new ArrayList();
p、 添加(新人员(“Abie”、“Backi”);
p、 加上(新人(“巴蒂”、“赛艇手”);
p、 添加(新人员(“Pavol”、“Rower”);
p、 添加(新人员(“Konrath”、“Will”);
返回p;
当我使用与“Rower”相同的第二个名称时,此方法按第一个名称排序
有没有简单的方法可以做到这一点?您需要使用自定义的:
一种比较函数,它对某些对象集合施加总排序。可以将比较器传递给排序方法(如Collections.sort或Arrays.sort),以允许对排序顺序进行精确控制
下面是自java 1.2以来有效的比较器
实现。
从Java8开始,可以使用Robin Topper评论的更短的实现
public class SecondThanFirstComparator implements Comparator<Person> {
public int compare(Person p1, Person p2) {
// Handle nulls
if (p1.getSecondName().equals(p2.getSecondName())) {
return p1.getFirstName().compareTo(p2.getFirstName());
} else {
return p1.getSecondName().compareTo(p2.getSecondName());
}
return 0;
}
}
List<Person> p = ...;
...
Collections.sort(p, new SecondThanFirstComparator());
// From here p list is sorted
public类secondhanfirstcomparator实现Comparator{
公共整数比较(人员p1、人员p2){
//处理空值
如果(p1.getSecondName().equals(p2.getSecondName())){
返回p1.getFirstName().compareTo(p2.getFirstName());
}否则{
返回p1.getSecondName().compareTo(p2.getSecondName());
}
返回0;
}
}
列表p=。。。;
...
sort(p,新的SecondThanFirstComparator());
//从这里p列表被排序
您需要使用自定义:
一种比较函数,它对某些对象集合施加总排序。可以将比较器传递给排序方法(如Collections.sort或Arrays.sort),以允许对排序顺序进行精确控制
下面是自java 1.2以来有效的比较器
实现。
从Java8开始,可以使用Robin Topper评论的更短的实现
public class SecondThanFirstComparator implements Comparator<Person> {
public int compare(Person p1, Person p2) {
// Handle nulls
if (p1.getSecondName().equals(p2.getSecondName())) {
return p1.getFirstName().compareTo(p2.getFirstName());
} else {
return p1.getSecondName().compareTo(p2.getSecondName());
}
return 0;
}
}
List<Person> p = ...;
...
Collections.sort(p, new SecondThanFirstComparator());
// From here p list is sorted
public类secondhanfirstcomparator实现Comparator{
公共整数比较(人员p1、人员p2){
//处理空值
如果(p1.getSecondName().equals(p2.getSecondName())){
返回p1.getFirstName().compareTo(p2.getFirstName());
}否则{
返回p1.getSecondName().compareTo(p2.getSecondName());
}
返回0;
}
}
列表p=。。。;
...
sort(p,新的SecondThanFirstComparator());
//从这里p列表被排序
您可能需要类似的东西(您没有提供人员
bean详细信息,所以getter名称只是我的猜测):
您可能需要类似的东西(您没有提供
Person
bean详细信息,所以getter名称只是我的猜测):
person对象应实现可比较的界面: 实现此接口的对象列表(和数组)可以按Collections.sort(和arrays.sort)自动排序。实现此接口的对象可以用作排序映射中的键或排序集中的元素,而无需指定比较器
类C的自然顺序称为与equals一致当且仅当e1.compareTo(e2)==0对于类C的每个e1和e2具有与e1.equals(e2)相同的布尔值。请注意,null不是任何类的实例,即使e.equals(null),e.compareTo(null)也应抛出NullPointerException返回false。您的person对象应实现可比较的界面: 实现此接口的对象列表(和数组)可以按Collections.sort(和arrays.sort)自动排序。实现此接口的对象可以用作排序映射中的键或排序集中的元素,而无需指定比较器
类C的自然顺序称为与equals一致当且仅当e1.compareTo(e2)==0对于类C的每个e1和e2具有与e1.equals(e2)相同的布尔值。请注意,null不是任何类的实例,即使e.equals(null),e.compareTo(null)也应抛出NullPointerException返回false。您累了什么?到目前为止,对一个对象进行排序本质上是一件基本的事情,带有实现接口。互联网上有很多关于这个界面的信息。你有什么累了?到目前为止,对一个对象进行排序本质上是一件基本的事情,带有实现接口。互联网上有很多关于这个接口的信息。略短一点:
Collections.sort(p,Comparator.comparing((Person p)->p.getSecondName())。然后比较((Person p)->p.getFirstName))代码>谢谢大家,它确实有效:)稍微短一点:集合。排序(p,Comparator.comparing((Person p)->p.getSecondName())。然后比较((Person p)->p.getFirstName))代码>谢谢你们,它确实有效:)