Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按第二个名称对列表排序,但如果第二个名称相同,则按第一个名称排序_Java_Sorting - Fatal编程技术网

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))谢谢你们,它确实有效:)