[英]Comapring multiple attributes with Comparable Interface
首先,在這篇文章中我沒有提出任何問題。 我發布此信息是因為我需要您的建議。
我在Struts MVC中工作,這是我的要求:-
有一個用於“班級”輸入的頁面,用戶可以在其中添加,編輯和刪除學院中學生的班級。 因此,在上述三個過程之后,刷新頁面時,表中存在的數據應顯示在頁面其余部分。 該列表將顯示SlNo。 , 課程名稱 , 學期 , 班級名稱 , 班級代碼等。
我正在使用TO類來顯示頁面中的現有數據。 之前,該列表是根據課程名稱排序的[ TO是可比較類型,比較機制基於課程名稱]。 現在他們希望根據課程名稱和學期編號進行排序,這意味着列表應該像
所以最初我更改了mysql查詢, 以按學期的課程名稱進行排序 。 然后,我更改了TO類,使其沒有內置的比較機制。 該代碼工作正常。
但是一段時間之后,我又有了一個新主意,我嘗試使用Comparable接口實現相同的機制,在comapreTo
方法中,我獲取了課程名稱和當前參考學期的哈希碼並添加了它們,然后對comapreTo
方法的參數引用,我將兩個答案的差值都返回了。 出乎意料的是,它可以工作,但是我不確定這在每種情況下都可以工作。 這是滿足要求的好方法嗎? 這是編程的好方法嗎?
示例代碼:-
package com.sample;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
class Classes implements Comparable<Classes> {
private String name;
private int semester;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSemester() {
return semester;
}
public void setSemester(int semester) {
this.semester = semester;
}
public Classes(String name, int semester) {
super();
this.name = name;
this.semester = semester;
}
public int compareTo(Classes other) {
return (this.name.hashCode() + new Integer(this.semester).hashCode()) -
(other.name.hashCode() + new Integer(other.semester).hashCode());
}
}
public class ComparableMultipleAttributes {
public static void main(String[] args) {
List<Classes> classList = new ArrayList<Classes>();
classList.add(new Classes("BA English", 1));
classList.add(new Classes("BA Economics", 3));
classList.add(new Classes("BA Economics", 1));
classList.add(new Classes("BA English", 6));
classList.add(new Classes("BA English", 5));
classList.add(new Classes("BA Economics", 2));
classList.add(new Classes("BA Economics", 5));
classList.add(new Classes("BA English", 4));
classList.add(new Classes("BA Economics", 4));
classList.add(new Classes("BA English", 3));
classList.add(new Classes("BA Economics", 6));
classList.add(new Classes("BA English", 2));
Collections.sort(classList);
Iterator<Classes> it = classList.iterator();
while(it.hasNext()) {
Classes c = it.next();
System.out.println(c.getName() + "---" + c.getSemester());
System.out.println();
}
}
}
除了獲得的好注釋之外,如果您真的希望比較器按多個屬性排序,那么使用jdk-8會很容易實現:
Comparator.comparing(Classes::getName)
.thenComparing(Classes::getSemester)
... other properties
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.