我有一个Student对象的arrayList。这些对象都有共同的属性,如名字和姓氏,UID(大学ID号)GPA,然后有研究生和本科生的子类。我一直难以理解如何根据UID编号按照从最低到最高的顺序对arraylist进行排序。 UID号码是U123456格式的STRING。总有一个U,然后是不同数量的整数。因为U,我无法解析为int并按此方式排序,我已经看到正在使用Comparator
类,但我不明白它,因为它似乎只比较两个对象?!如果Comparator
课程适用于此,有人可以向我解释它的作用及其运作方式吗?
答案 0 :(得分:3)
由于这种行为,很容易比较:
System.out.println("u1".compareTo("u2")); // -1
System.out.println("u2".compareTo("u2")); // 0
System.out.println("u3".compareTo("u2")); // 1
System.out.println("u4".compareTo("u2")); // 2
所以这就是你需要做的事情:
Student implement Comparable
...您可以查看http://docs.oracle.com/javase/6/docs/api/java/lang/Comparable.html compareTo(Student s)
,这只是return(this.id.compareTo(s.id));
答案 1 :(得分:1)
您也可以使用您已经提到过的Comparer类。
如果从Student类实现Comparator类,则需要提供compare方法的实现,您可以在其中指定逻辑。执行Collections.sort(list,comparator)方法时将调用此方法。此外,您可以将调试点放在比较方法中,以确保它是如何被调用的。
您的问题的完整示例如下:
import java.util.Comparator;
public class Student implements Comparator<Student>{
private String uid;
@Override
public int compare(Student o1, Student o2) {
Integer i1 = Integer.parseInt(o1.getUid().substring(1)); // Skip the first character U
Integer i2 = Integer.parseInt(o2.getUid().substring(1)); // Skip the first character U
if(i1 > i2 ){
return 1;
}else if(i1< i2){
return -1;
}else {
return 0;
}
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
}
package test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class TestSort {
public TestSort(){
Student s1 = new Student();
s1.setUid("U34334");
Student s2 = new Student();
s2.setUid("U64454");
Student s3 = new Student();
s3.setUid("U13344");
List<Student> list = new ArrayList<Student>();
list.add(s1);
list.add(s2);
list.add(s3);
Collections.sort(list, new Student());
for(Student s : list){
System.out.println(s.getUid());
}
}
public static void main(String[] args){
new TestSort();
}
}
答案 2 :(得分:0)
试试这个:
ArrayList lsStudent = GetStudentData();
lsStudent.Sort((S1, S1) => Convert.ToInt32(S1.UID.Substring(1))
.CompareTo(Convert.ToInt32(S2.UID.Substring(1))));
这将解决您的问题。
答案 3 :(得分:0)
让您的Student
课程实施Comparable
界面:
public class Student implements Comparable<Student> {
并在compareTo
课程中实施Student
方法,如下所示:
@Override
public int compareTo(Student s) {
return UID.compareToIgnoreCase(s.UID);
}
此处UID.compareToIgnoreCase(s.UID)
会对您的字母数字值进行比较,以便进行分类。
然后只需使用Collections.sort
对学生对象集合进行排序。