2016-10-14 2 views
-4

У меня есть объект массива объектов, который не может реализовать интерфейс Comparator/Comparable.Как сортировать ArrayList объектов с помощью поля без компаратора/сопоставимого

Объекты имеют поле: «SequenceNumber», которое является целым числом. Мне нужно отсортировать arraylist в порядке этого поля (от самого низкого до самого высокого) без реализации упомянутых интерфейсов.

Есть ли простой способ сделать это, я могу вручную написать алгоритм сортировки, но задаюсь вопросом, есть ли более эффективный (и более бесплатный) способ сделать это, который я пропустил во время поиска?

Примечание: Использование Java 7.

+1

Да, использование Компаратор – ControlAltDel

+0

Как я уже говорил в этом вопросе, объекты не в состоянии реализовать компаратор – BenParker93

+0

Зачем вам нужно сортировать без использования этих 2 интерфейса? Они предназначены для сортировки. – Ash

ответ

5

Создать класс компаратор для обработки сортировки:

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

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

} 

Затем сортировать ArrayList с ним:

Collections.sort(myArrayList, new MyObjectComparator()); 
0

Вы можете использовать лямбда-выражения, введенные в Java8 для сортировки объектов без реализации интерфейса Comparable/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)); 
    } 
} 
+0

OP использует Java 7. – Stephan

Смежные вопросы