在java中对对象列表进行排序

时间:2014-10-30 04:53:07

标签: java collections

我想根据Emp字段按升序对此marks个对象列表进行排序。

List<Emp> emp= new ArrayList<Emp>();

public class Emp implements Serializable {
    private String empname;
    private String section;
    private int empId;
    private int marks;
    ...

3 个答案:

答案 0 :(得分:2)

您需要编写一个比较器,否则Sort方法会假定您在排序时要使用哪些字段。

 Collections.sort(emp, new Comparator<Emp>() { public int compare(Emp one, Emp two) {
       return one.marks.compareTo(two.marks);
  });

在我的示例中,我将字段标记视为公共标记,如果您愿意,请使用getter替换one.marks。

此外,由于您使用的是没有compareTo的整数,请执行以下操作:

     Collections.sort(list, new Comparator<Emp>() {
       public int compare(Emp one, Emp two) {
           int cmp = one.getMarks() > two.getMarks() ? +1 : one.getMarks() < two.getMarks() ? -1 : 0;
           return cmp;
       }
   });

答案 1 :(得分:1)

您可以使用比较器对象进行排序。

Collections.sort();

进行排序。

这适用于您的列表。要使用的方法是compareTo。

    if (list.size() > 0) {
    Collections.sort(list, new Comparator<Emp>() {
        @Override
        public int compare(final Emp object1, final Emp object2) {
            return object1.getMarks().compareTo(object2.getMarks());
        }
       } );
   }

答案 2 :(得分:0)

在Java中支持对象比较有两种主要方式。

您可以让您的类实现Comparable接口,当您的对象具有您依赖的自然顺序时(例如,字符串按字母顺序排序),这是可以接受的。这要求类实现compareTo方法,该方法定义实例之间的比较规则。

标准替代方法是为您的班级实例化Comparator,并使用compare方法指定比较规则。

在您的情况下,后一种选择似乎更合适。 compare方法的机制非常简单:它需要两个类的实例,如果第一个是&#34,则返回负值;小于&#34;第二个是正数,如果它是&#34;更大&#34;,如果它们是&#34;等于&#34;则为0。对于基于整数的比较,例如通过marks进行比较,快速技巧是返回数字的差异。

一旦定义了Comparator,排序就像调用Collections.sort方法一样简单,选择采用List和指定Comparator的方法签名。

List<Emp> emps = new ArrayList<Emp>();
// populate list...

Comparator<Emp> empComparator = new Comparator<Emp>() {
    public int compare(Emp e1, Emp e2) {
        return e2.getMarks() - e2.getMarks();
    }
};

Collections.sort(emps, empComparator);
相关问题