Re: [問題] Collections.sort更簡潔的寫法?

看板java作者 (批踢踢世界)時間10年前 (2015/05/28 16:30), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/6 (看更多)
有程式碼帶一些疑問。 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
文章代碼(AID): #1LPqAf2R (java)
討論串 (同標題文章)
文章代碼(AID): #1LPqAf2R (java)