Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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 如何在没有Comparator/Comparable的情况下按字段对对象的ArrayList排序_Java_Sorting_Object_Arraylist_Comparable - Fatal编程技术网

Java 如何在没有Comparator/Comparable的情况下按字段对对象的ArrayList排序

Java 如何在没有Comparator/Comparable的情况下按字段对对象的ArrayList排序,java,sorting,object,arraylist,comparable,Java,Sorting,Object,Arraylist,Comparable,我有一个无法实现Comparator/Comparable接口的arraylist对象 对象有一个字段:“SequenceNumber”,它是一个整数。我需要按照这个字段从低到高的顺序对arraylist进行排序,而不需要实现提到的接口 有没有一种简单的方法可以做到这一点,我可以手动编写一个排序算法,但我想知道是否有一种更有效、更无bug的方法可以做到这一点,而我在搜索时错过了这种方法 注意:使用Java7 创建一个comparator类来处理排序: private class MyObject

我有一个无法实现Comparator/Comparable接口的arraylist对象

对象有一个字段:“SequenceNumber”,它是一个整数。我需要按照这个字段从低到高的顺序对arraylist进行排序,而不需要实现提到的接口

有没有一种简单的方法可以做到这一点,我可以手动编写一个排序算法,但我想知道是否有一种更有效、更无bug的方法可以做到这一点,而我在搜索时错过了这种方法


注意:使用Java7

创建一个comparator类来处理排序:

private class MyObjectComparator<MyObject> implements Comparator<MyObject> {

  /**
   * {@inheritDoc}
   */
  @Override
  public int compare(MyObject o1, MyObject o2) {
     return o2.getSequenceNumber() - o1.getSequenceNumber();
  }

}

您可以使用Java8中引入的lambda表达式对对象进行排序,而无需实现Comparable/Comparator接口

下面是使用lambda对对象进行排序和显示的代码片段

class Student
{  
    int id;  
    String name;  

    public Student(int id, String name) 
    {  
        this.id = id;  
        this.name = name;  
    }
    public  String toString()
    {
        return id +" " +name;
    }
}
public class SortDemo 
{
    public static void main(String[] args) 
    {
        List<Student> list=new ArrayList<Student>();  

        //Adding Objects  
        list.add(new Student(1,"XYZ"));  
        list.add(new Student(3,"ABC"));  
        list.add(new Student(2,"PQR"));  

        System.out.println("Sorting on the basis of name...");  

        // implementing lambda expression  
        Collections.sort(list,(p1,p2)->{return p1.name.compareTo(p2.name);});  

        list.forEach((s)->System.out.println(s));
    }
}

是的,使用Comparator正如我在问题中提到的,对象无法实现Comparator为什么不使用这两个接口就需要排序?它们是用来帮助你进行排序的。@ControlAltDel不是吗@如果这些对象是核心代码库的一部分,我只创建一个使用它们的插件,我不想以任何方式影响这些对象。感谢您的帮助。OP使用Java 7。lambda仍在方法调用中实现Comparator接口:
class Student
{  
    int id;  
    String name;  

    public Student(int id, String name) 
    {  
        this.id = id;  
        this.name = name;  
    }
    public  String toString()
    {
        return id +" " +name;
    }
}
public class SortDemo 
{
    public static void main(String[] args) 
    {
        List<Student> list=new ArrayList<Student>();  

        //Adding Objects  
        list.add(new Student(1,"XYZ"));  
        list.add(new Student(3,"ABC"));  
        list.add(new Student(2,"PQR"));  

        System.out.println("Sorting on the basis of name...");  

        // implementing lambda expression  
        Collections.sort(list,(p1,p2)->{return p1.name.compareTo(p2.name);});  

        list.forEach((s)->System.out.println(s));
    }
}