2016-11-29 19 views
1

我有一個arrayList包含studentId,名字和學期沒有幾個學生。有相同studentId但不同學期編號的條目。我必須根據studentId從列表中刪除重複項,並且輸出應該按照學期的升序排列。要刪除重複項,我實現了可比較的和treeset來檢查id是否相同。我的問題是我如何根據學期編號排序treeset。treeset中的多個覆蓋java

public class Student implements Comparable<Student>{ 


private Integer studentId; 
private String studentName; 
private Integer studentSemester; 


@Override 
public int compareTo(Student o) { 
    return o.getStudentId().compareTo(this.getStudentId()); 
} 

回答

1

比較studentId首款然後studentSemester的

public class Student implements Comparable<Student> { 

    private int studentId; 
    private String studentName; 
    private int studentSemester; 

    public Student(int sId, String sName, int sSemester) { 
     this.studentId = sId; 
     this.studentName = sName; 
     this.studentSemester = sSemester; 
    } 

    public int getStudentId() { 
     return studentId; 
    } 

    public void setStudentId(int studentId) { 
     this.studentId = studentId; 
    } 

    public String getStudentName() { 
     return studentName; 
    } 

    public void setStudentName(String studentName) { 
     this.studentName = studentName; 
    } 

    public int getStudentSemester() { 
     return studentSemester; 
    } 

    public void setStudentSemester(int studentSemester) { 
     this.studentSemester = studentSemester; 
    } 

    @Override 
    public String toString() { 
     return "[" + studentId + ", " + studentName + ", " + studentSemester + "]"; 
    } 

    @Override 
    public int compareTo(Student that) { 
     if(this.getStudentId() == that.getStudentId()) 
      return 0; 
     if(this.getStudentSemester() > that.getStudentSemester()) 
      return 1; 
     if(this.getStudentSemester() < that.getStudentSemester()) 
      return -1; 
     return 0; 
    } 

} 

下面是測試類

import java.util.ArrayList; 
import java.util.List; 
import java.util.TreeSet; 

public class MultipleOverrides { 

    public static void main(String args[]) { 

     Student s1 = new Student(1, "A", 1); 
     Student s2 = new Student(1, "A", 2); 
     Student s3 = new Student(1, "A", 3); 
     Student s4 = new Student(2, "B", 1); 
     Student s5 = new Student(2, "B", 2); 
     Student s6 = new Student(2, "B", 3); 
     Student s7 = new Student(3, "C", 1); 
     Student s8 = new Student(3, "C", 2); 
     Student s9 = new Student(3, "C", 3); 

     List<Student> students = new ArrayList<>(); 
     students.add(s1); 
     students.add(s2); 
     students.add(s3); 
     students.add(s4); 
     students.add(s5); 
     students.add(s6); 
     students.add(s7); 
     students.add(s8); 
     students.add(s9); 

     System.out.println("All students before sorting : " + students); 

     TreeSet<Student> sortedStudents = new TreeSet<>(); 
     sortedStudents.addAll(students); 
     System.out.println("All students after sorting : " + sortedStudents); 

    } 

} 

輸出:在排序前

所有的學生:[1,A, 1,A,2,[1,A,3],[2,B,1],[2,B,2],[2,B,3],[3, C,1],[3,C,2],[3,C,3]]

排序後的所有學生:[[1,A,1],[2,B,2],[ C,3]]

+0

在覆蓋結束時,該方法應返回1而不是0,因爲0不允許任何其他具有相同學期的對象添加到樹中。 –