Re: [問題] Collections.sort更簡潔的寫法?
有程式碼帶一些疑問。
MyData d1 = new MyData();
MyData d2 = new MyData();
List<MyData> dataList = new ArrayList<MyData>();
做sorting,
應排序在dataList內d1和d2的相對位置,誰前誰後。
所以當MyData裡面有7個int當可能的排序判斷條件,
又Override Comparator裡的int compare(T o1, T o2),
: @Override
: public int compare(MyData lhs, MyData rhs) {
: return (lhs.i > rhs.i);
: }
成立的(除了型態檢查錯誤以外,後講)
但對於7次很奇怪,
問題在於
d1.i = 1;
d2.i = 2;
d1.j = 2;
d2.j = 1;
的時候會有問題。
所以
觀念上應為
將MyData之間做比較
class MyData
{
public int i, j, k, l, m, n, o; // 七組資料
public int compareTo(MyData rhs) {
return (this.i - rhs.i) >= 0 ? 1 : 0;
// boolean理應無法轉int, 故三元運算式是一種改法
}
};
然後
Collections.sort(dataList, new Comparator<MyData>() {
public int compare(MyData o1, MyData o2) {
return o1.compareTo(o2);
}
});
對於那個7次問題但條件衝突仍要解決,
也可能我功力不夠無法理解7次如何處理,
可能條件之間具有優先性。
但相信應該是在class MyData的
public int compareTo(MyData rhs) {
return (this.i - rhs.i) >= 0 ? 1 : 0;
// boolean理應無法轉int, 故三元運算式是一改法
}
寫得更多條件的處理。
--
我是有考慮把int改Integer進行所謂包兩層的判斷,
僅是考慮不確定可行,請先忽略這段。
※ 引述《james732 (好人超)》之銘言:
: 使用IDE:Android Studio 1.2.1.1
: 我有一個class:
: class MyData
: {
: public int i, j, k, l, m, n, o; // 七組資料
: };
: 然後有個 List 裝了很多個 Data
: List<MyData> dataList = new ArrayList<MyData>();
: 我希望讓使用者可以選擇根據i,j,k,l,m,n,o的某一項來排序list,所以寫了
: Collections.sort(dataList, new Comparator<MyData>() {
: @Override
: public int compare(MyData lhs, MyData rhs) {
: return (lhs.i > rhs.i);
: }
: }
: 同樣的內容寫了七次,就只有上面紅色的部份不同
: 雖然程式看起來可以正常運作,但自己都覺得那一堆實在累贅....
: 想請問有沒有其他辦法可以讓我重覆的code不要那麼多呢?變得更加簡潔
: (假如無法使用lambda...我還在研究Android studio能不能用...)
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.248.172.93
※ 文章網址: https://www.ptt.cc/bbs/java/M.1432830633.A.09B.html
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 6 篇):
java 近期熱門文章
PTT數位生活區 即時熱門文章