我想根据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;
...
答案 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);