如何使用Object参数对Arraylist中的对象进行排序

时间:2014-08-14 15:11:57

标签: java sorting object arraylist

我遇到了在Arraylist中排序对象的问题,因为我是排序对象的新手。

对arraylist进行排序是非常基本的,但是对对象的arraylist进行排序是完全不同的事情。基本上我已经在堆栈溢出中搜索代码,人们似乎使用比较器来解决他们的问题,但是他们没有解释如何实际调用该方法并将其投入使用,这就是我在这里的原因。

使用下面的代码,我试图用参数 - 字符串名称,int年龄和字符串课程对学生的arraylist进行排序。然后我有另一个类来存储Student对象并在类中对它们进行排序。这就是我所拥有的:

Student.java

public class Student {

    private String name, course;
    private int age;

    public Student(String name, int age, String course) {
        this.name = name;
        this.age = age;
        this.course = course;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String getCourse() {
        return course;
    }
}

CompareObj.java

import java.util.*;

public class CompareObj implements Comparator<Student>{

    private ArrayList<Student> sList;

    public CompareObj() {
        sList = new ArrayList<Student>();
    }

    @Override
    public int compare(Student s1, Student s2) {
         return s2.getName().compareTo(s1.getName());
    }

    public void add(Student s1) {
        sList.add(s1);
    }

    public void displayList() {
        for(int i = 0; i<sList.size();i++) {
            System.out.println(sList.get(i).getName());
        }
    }
}

在CompareObj类中,如何使用已实现的方法compare(s1,s2),如何使用此方法对学生对象的arraylist进行排序?

5 个答案:

答案 0 :(得分:8)

how can i use this method to sort my arraylist of student objects?

您无需亲自致电compare()。您可以通过调用Collections.sort()方法将比较器传递给compare(),以便为您排序。


使用自定义类CompareObj

Collections.sort(studentList, new CompareObj());

或者没有CompareObj的另一种方式是,

Collections.sort(studentList,new Comparator<Student>() {
         @Override
        public int compare(Student s1, Student s2) {
                return s1.getName().compareToIgnoreCase(s2.getName());
        }
    });

答案 1 :(得分:1)

您的班级CompareObj正在混合ArrayList(通过encapuslation)和Comparator(通过实现接口)。您不需要这样做,实施Comparator就足够了。

尝试以下方法:

ArrayList<Strudent> students = new ArrayList<Student>();

// fill the ArrayList...

Collections.sort(students, new CompareObj());

这将按照student课程中指定的名称对CompareObj进行排序。

答案 2 :(得分:0)

您可以使用Arrays.sort()方法

Arrays.sort(studentArray, new CompareObj ());

但是,如果您认为名称是一种自然订购学生的方式,那么请使用Student类实现Comparable接口并覆盖compareTo()方法。

答案 3 :(得分:0)

对ArrayList中的元素进行排序的示例

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class ArrayListSorting {

public static void main(String[] args) {
    // TODO Auto-generated method stub

    ArrayList al=new ArrayList<>();
    al.add("a");
    al.add("b");
    al.add("c");
    al.add("d");
    al.add("e");

    System.out.println("Before sorting");
    System.out.println(al);
    Collections.sort(al,new ArrayCustomizedSorting());
    System.out.println("After  sorting");
    System.out.println(al);
 }

}

 class ArrayCustomizedSorting implements Comparator<String>{

  @Override
  public int compare(String o1, String o2) {
    // TODO Auto-generated method stub
    return -o1.compareTo(o2);
 }
}

答案 4 :(得分:0)

您可以为此使用数组排序算法。

//Convert arraylist to array
ZAATSAYIM[] a = jsonResultWrapper.sayimDTOs.toArray(
                new ZAATSAYIM[jsonResultWrapper.sayimDTOs.size()]);

        //By date
        Date date1, date2;

        boolean sorted = false;
        ZAATSAYIM temp;
        while (!sorted) {
            sorted = true;
            for (int i = 0; i < a.length - 1; i++) {

                date1 = a[i].getCDATETIMEDAte();
                date2 = a[i + 1].getCDATETIMEDAte();

                int diff = date2.compareTo(date1);
                boolean after = (diff > 0);
                boolean isSame = (diff == 0);
                if (after) {
                    temp = a[i];
                    a[i] = a[i + 1];
                    a[i + 1] = temp;
                    sorted = false;
                } else if (isSame && (a[i].getSignlaStregthInt() < a[i + 1].getSignlaStregthInt())) {
                    temp = a[i];
                    a[i] = a[i + 1];
                    a[i + 1] = temp;
                    sorted = false;
                }
            }
        }

        jsonResultWrapper.sayimDTOs = new ArrayList<ZAATSAYIM>(Arrays.asList(a));