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

看板java作者 (來人!上夾棍!)時間10年前發表 (2015/05/28 16:40), 10年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/6 (看更多)
※ 引述《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,所以寫了 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 想到一個方法給你參考看看 先弄一個列舉,看要放在MyData裡面還是另外寫在外部都可以: public enum Index{ I, J, K, L, ...,O; } 然後寫一個comparator 可以寫成你主要class的內部類別 class MyComparator implements Comparator<MyData>{ private Index idx = Index.I; public int compare(MyData lhs, MyData rhs) { int[] larray = {lhs.i, lhs.j, lhs.k, ...lhs.o}; int[] rarray = {rhs.i, rhs.j, rhs.k, ...rhs.o}; int index = idx.ordinal(); return (larray[index] > rarray[index]); } public void setIdx(Index idx){ this.idx = idx; } } 這樣只要new一次 之後在每次傳給Collections.sort之前調整Index就好了 例如要以k排序: comparator.setIdx(Index.K); Collections.sort(dataList, comparator); 因為只有調整comparator 而sort那行的寫法不管要怎麼排序都是一樣的 所以可以把sort的程式碼寫在別的地方 假設寫在updateUI()方法裡面 改變排序方式的時候只需要在事件監聽內寫 comparator.setIdx([由user決定]); updateUI(); 就可以了 這邊用列舉寫是避免手殘傳錯 用int搭配訂常數即可 只是用int要稍微注意錯誤處理 另外用列舉的話你可以把它當作下拉選單被選取後傳回的物件 直接塞給setIdx 應該有更好的寫法啦... 剛好想到這個 參考看看吧 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.164.7.251 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1432831224.A.EBF.html ※ 編輯: haha02 (1.164.7.251), 05/29/2015 02:24:39
文章代碼(AID): #1LPqJuw_ (java)
討論串 (同標題文章)
文章代碼(AID): #1LPqJuw_ (java)