2013-10-31 179 views
-2

我從格式List中獲取來自數據庫的數據。Java +比較器+排序

UserSession將具有WorkStationName,UserName和AreaName。

現在我想先排序它的WorkStationname明智然後用戶名,​​然後AreaName。

如何在java中做到這一點?是否可以使用比較器來做到這一點?

+6

我敢打賭,你還沒有嘗試過。 :) –

+0

你到底做了什麼?在這裏發佈你的進度 –

+0

我已經創建了第一個區域compersion,然後這個列表將再次對用戶comperision進行排序,然後這個列表將再次被Workstation的Comparator排序。但它沒有給我正確的結果。 – user223614

回答

0

您可以使用查詢來做到這一點。
或者您可以覆蓋compare函數。
This Post上計算器可以幫助你做到這一點

+0

它應該是一個評論,比答案... –

+0

你好,我試過了。但它說我需要一些聲譽或積分(不管它是什麼)將它置於評論中。無論如何,解決方案總是一個解決方案。 (我的意思是我試圖給)。並看到upvoted的答案。這是幾乎相同的帖子鏈接,我給了 –

+0

嘗試我給出的答案:) –

1

最好的辦法:

public void sortAccordingToAboveRequirement(List<UserSession> userSessions){ 

Collections.sort(userSessions,myComparator); 

} 


    static Comparator<UserSession> myComparator=new Comparator<UserSession>() { 
    @Override 
     public int compare(UserSession user1, UserSession user2) { 
     int value=0; 
     value=user1.getWorkStationName().compareTo(user2.getWorkStationName()) 
     if(value!=0) return value; 
     value=user1.getUserName().compareTo(user2.getUserName()); 
     if(value!=0) return value; 
     value=user1.getAreaName().compareTo(user2.getAreaName()); 
     return value; 
    } 
}; 

使用與compareToIgnoreCase(),如果你想:)

0

您可以使用一個比較,也可以實現compareable接口你上課。我給你舉個例子爲謝勝利方式:

Collections.sort(UserSessionList); 

類UserSession必須implements Comparable<UserSession>現在。然後你可以重載這個類的compareTo方法。例如:

@Override 
public int compareTo(UserSession o) { 

    if(null== o) 
     return 1; 
    if(getWorkStationName() == null && o.getWorkStationName()==null) 
     return 0; 
    if(getWorkStationName() == null && o.getWorkStationName()!=null) 
     return -1; 
    if(getWorkStationName() != null && o.getWorkStationName()==null) 
     return 1; 
    return o.getWorkStationName().compareTo(getWorkStationName()); 
} 

比較功能的其餘部分,你必須自己寫! :)