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

作者: pttworld (批踢踢世界)   2015-05-30 08:23:52
: 我希望讓使用者可以選擇根據i,j,k,l,m,n,o的某一項來排序list,所以寫了
class MyData
{
private static String strSortingOrder;
public int i, j, k, l, m, n, o; // 七組資料
public int compareTo(MyData rhs) {
if("i".equals(strSortingOrder)) {
return this.i - rhs.i;
} else if("j".equals(strSortingOrder)) {
return this.j - rhs.j;
} else if("k".equals(strSortingOrder)) {
return this.k - rhs.k;
}
return this.i - rhs.i;
}
public void setStrSortingOrder(String fieldName) {
strSortingOrder = fieldName;
}
};
MyData d1 = new MyData();
MyData d2 = new MyData();
d1.i = 1;
d2.i = 2;
d1.j = 2;
d2.j = 1;
d1.setStrSortingOrder("j");
List<MyData> dataList = new ArrayList<MyData>();
dataList.add(d1);
dataList.add(d2);
Collections.sort(dataList, new Comparator<MyData>() {
public int compare(MyData o1, MyData o2) {
return o1.compareTo(o2);
}
});
for(MyData d : dataList) {
System.out.println(d.i + " " + d.j);
}
※ 引述《pttworld (批踢踢世界)》之銘言:
: 有程式碼帶一些疑問。
: 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, 故三元運算式是一改法
: }
: 寫得更多條件的處理。
作者: Frozenmouse (*冰之鼠*)   2015-05-30 10:51:00
這種實作滿危險的,隨便一個MyData都可以影響任何與自己無關的list的排序

Links booklink

Contact Us: admin [ a t ] ucptt.com