作者pttworld (批踢踢世界)
看板java
标题Re: [问题] Collections.sort更简洁的写法?
时间Fri May 29 00:30:30 2015
有程式码带一些疑问。
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://webptt.com/cn.aspx?n=bbs/java/M.1432830633.A.09B.html