簡體   English   中英

使用可比接口將多個屬性共同映射

[英]Comapring multiple attributes with Comparable Interface

首先,在這篇文章中我沒有提出任何問題。 我發布此信息是因為我需要您的建議。

我在Struts MVC中工作,這是我的要求:-

有一個用於“班級”輸入的頁面,用戶可以在其中添加,編輯和刪除學院中學生的班級。 因此,在上述三個過程之后,刷新頁面時,表中存在的數據應顯示在頁面其余部分。 該列表將顯示SlNo。 課程名稱學期班級名稱班級代碼等。

我正在使用TO類來顯示頁面中的現有數據。 之前,該列表是根據課程名稱排序的[ TO是可比較類型,比較機制基於課程名稱]。 現在他們希望根據課程名稱和學期編號進行排序,這意味着列表應該像

  1. 經濟學士1
  2. 經濟學士學位2
  3. 經濟學士3
  4. 經濟學士學位4
  5. 經濟學士學位5
  6. 經濟學士學位6
  7. BA英語1
  8. BA英語2
  9. BA英語3
  10. BA英語4
  11. BA英語5
  12. BA英語6

所以最初我更改了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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM