2016-05-26 12 views
0

教師IDのある生徒のリストがあります。以下は学生ビーンです。教師IDに基づいて学生リストを並べ替えます

public class Student { 
    private Integer Id; 
    private String Name; 
    private Integer teacherId; 

public Student(Integer empId, String empName, Integer teacherId) { 
    super(); 
    this.empId = empId; 
    this.empName = empName; 
    this.teacherId = teacherId; 
} 
    // setters getters 
} 

私のメインクラスには、以下のようなデータを持つ生徒のリストがあります。

public static void main(String[] args) { 
    int teacherId = 6; 
    List<Student> list = new ArrayList<Student>(); 

    list.add(new Student(1002, "Kausik",4)); 
    list.add(new Student(1004, "Tridibendu",6)); 
    list.add(new Student(1007, "Ram",8)); 
    list.add(new Student(1003, "Neeraj",6)); 
    list.add(new Student(1009, "Manish",8)); 
    list.add(new Student(1001, "Shyam",1)); 

    // Sorting collection in ascending order based on teacher id 
    Collections.sort(list, new StudentComparator()); 

} 

以下は私の学生コンパレータクラスです。私が教師IDとして2を渡す場合、リストは、すべての生徒が教師ID 2に連絡した方法でソートされるべきであり、残りは下になければならないように。

また、javaでこれを行うことができる他の方法はありますか?

public class StudentComparator implements Comparator<Student> { 

    @Override 
    public int compare(Student o1, Student o2) {   
     return o1.getTeacherId().compareTo(o2.getTeacherId()); 
    } 
} 

以下は、私が得ている出力です。

Id: 1001, Name: Shyam, TeacherId: 1 
Id: 1002, Name: Kausik, TeacherId: 4 
Id: 1004, Name: Tridibendu, TeacherId: 6 
Id: 1003, Name: Neeraj, TeacherId: 6 
Id: 1007, Name: Ram, TeacherId: 8 
Id: 1009, Name: Manish, TeacherId: 8 

しかし、私はparameter.Meanとして渡された教師IDに基づいて出力をしたい私は教師IDとして6を渡すならば、私の出力は以下のようになります。

Id: 1004, Name: Tridibendu, TeacherId: 6 
Id: 1003, Name: Neeraj, TeacherId: 6 
Id: 1001, Name: Shyam, TeacherId: 1 
Id: 1002, Name: Kausik, TeacherId: 4 
Id: 1007, Name: Ram, TeacherId: 8 
Id: 1009, Name: Manish, TeacherId: 8 

ので、教師は6通りのIDを持っているのでなければなりませんリストのトップへ

+0

を呼び出すことができます! 「私の比較方法では何を書いていますか」とはどういう意味ですか? あなたのリストに「スチューデントオブジェクト」を印刷しようとしましたか?これらは、次のコードを使用した後、 'teacherId'の基底でソートされます: 'Collections.sort(list、new StudentComparator());' – Abhishek

+0

私は、パラメータとして渡された教師IDに基づいて並べ替えを意味します。先生のID 6でソートすると、下に出力する必要があります。ID:1001、名前:Shyam、TeacherId:6 ID:1002、名前:Kausik、TeacherId:6 ID:1004、名前:Tridibendu、TeacherId:5 ID:1003、名前:Neeraj、TeacherId:7 ID:1007、名前:Ram、TeacherId:8 ID:1009、名前:Manish、TeacherId:8 –

+0

残りの生徒をどのように分類しますか?あるいはランダムであるべきかどうか。だから、あなたは上の6のTeacherIDに接続されている生徒を持っています、残りはどこに来ますか?私たちが降りるべきか、それとも重要ではないのか、次の5か7か?もう少し具体的にする必要があります。また、これまでに何を試しましたか? – Draken

答えて

1

あなたは残りの部分を、その後、通常の並べ替え、マッチした教師用負返すように強制することができます。

public class StudentComparator implements Comparator<Student> { 
    private int contactedTeacher; 
    public StudentComparator(int contactedTeacherId) { 
     this.contactedTeacher = contactedTeacherId; 
    } 
    @Override 
    public int compare(Student o1, Student o2) { 
     if(this.contactedTeacher == o1.teacherId) { 
      return -1; //Force negative 
     } else if(this.contactedTeacher == o2.teacherId) { 
      return 1; //Force positive 
     } 

     //If neither of the compared students contacted the teacher, compare normally by teacher ID 
     return o1.getTeacherId().compareTo(o2.getTeacherId()); 
    } 
} 

を次に、あなたのソートコールは次のようになります。あなたが何ができるか

Collections.sort(list, new StudentComparator(teacherId)); 
+0

両方の生徒が教師に連絡するとどうなりますか?確かに、それはまだ分類されますが、私はT. Claverieの答えは比較がどのように動作するかについてもう少し明確です – Draken

2

Studentを実装しますですComparable<Student>。そのために、あなたが行うことができます:

はあなたの他の物質に関連する
public class Student implements Comparable<Student> { 

... 

    @Override 
    public int compareTo(Student s) { 
     return this.teacherId.compareTo(s.teacherId); 
    } 
} 

、あなたはちょうどあなたが与えられた教師IDに基づいて、二つの部分にあなたのリストを分割できるようになる別のコンパレータを実装することができます。あなたは1人の教師IDに基づいて、あなたのリストを分割したいとき

public class StudentComparator implements Comparator<Student> { 
    private Integer id; 

    public StudentComparator(Integer id) { 
     this.id = id; 
    } 

    @Override 
    public int compare(Student o1, Student o2) { 
     int id1 = o1.getTeacherId(); // Let the unboxing do its job 
     int id2 = o2.getTeacherId(); 
     if (id1 == id2) return 0; 
     if (id1 == this.id) return 1; 
     if (id2 == this.id) return -1; 
     return 0; 
    } 
} 

だから、あなたは..Theコードは罰金だ、問題が何であるかをCollections.sort(studentList, new StudentComparator(teacherId))

関連する問題