我需要实现对文件内容的排序。
每一行文件都包含下一个数据:Instructor, Course, Group, Student, Result
,并且可以包含同一学生的很少结果。
例如,:
Paul Schwartz,Introduction to Computer Architecture,I1,Ben Dunkin,88
Muhamed Olji,Object Oriented Programming,I4,Mike Brown,73
...
Paul Schwartz,Introduction to Computer Architecture,I1,Ben Dunkin,96
我需要为每一个教官实施
Student - Result
(降序);Student
。我从文件中读取并创建了类Item
class Item {
private String instructor;
private String course;
private String group;
private String student;
private int result;
// and add appropriate public getters/setters
}
在java中,我们可以使用两个选项之一对该类的所有元素进行排序:实现Comparable
接口的类和覆盖compareTo() method
的类,或者使用compare() method
的外部Comparator
接口。但是,我们如何使用这些选项对不同的排序查询进行排序。
compareTo()
来满足这一需求(或更好的compare()
)?发布于 2013-08-06 09:59:40
Item
的比较器将使用以下比较:
public class CustomComparator implements Comparator {
public int compare(Object aObjectOne, Object aObjectTwo) {
Item objectOne = (Item) aObjectOne;
Item objectTwo = (Item) aObjectTwo;
int cmpinstr = objectOne.getInstructor().compareTo(objectTwo.getInstructor());
if (cmpinstr != 0) // different instructor
return cmpinstr;
int cmpcourse = objectOne.getCourse().compareTo(objectTwo.getCourse());
if (cmpcourse != 0) // different course
return cmpcourse;
int cmpgroup = objectOne.getGroup().compareTo(objectTwo.getGroup());
if (cmpgroup != 0) // different group
return cmpgroup;
// sorting by result.
if (objectOne.getResult() < objectTwo.getResult())
return -1; // i1 has lower result than i2
else if (objectOne.getResult() > objectTwo.getResult())
return 1; // i1 has higher result than i2
return 0; // i1 and i2 have the same result
}
}
要获得前五名,只需对你收藏的最后五名学生进行排序和选择。
如果要根据组、讲师、课程或结果筛选数据,可以使用自定义筛选器循环遍历集合。
发布于 2013-08-06 09:58:32
您应该让类实现可比的,它有一个与String
一样的compareTo
方法。
因此,您的自定义比较器可能如下所示:
public class CustomComparator implements Comparator<Item> {
@Override
public int compare(Item i1, Item i2) {
return i1.compareTo(i2);
}
}
( compare()
方法必须返回int
,因此不能直接返回boolean
。)
而不是需要在您的overwrite
类中使用CompareTo
方法,在该类中定义应该比较哪些属性。
因为您想对不同的选项进行排序,所以需要多个比较方法和多个比较器。你只需要给他们打电话就行了。
您的排序代码应该是这样的:
Collections.sort(YourObejctList, new CustomComparator());
https://stackoverflow.com/questions/18086964
复制相似问题