[英]Android: advanced compare of ArrayList
我有ArrayList <Integer> a
,其中包含100個隨機項目[0:100)可以重復的項目。
另外,我有int b = 50
。 我想按此表達式結果的升序對ArrayList中的項目進行排序:
Math.abs (ArrayList.get(index) - b);
例如:
65 84 33 18 77...
之前的 ArrayList
15 34 17 32 27
-Math.abs(ArrayList.get(index)-b) 在之前 ;
65 33 77 18 84...
ArrayList 之后
15 17 27 32 34
-Math.abs(ArrayList.get(index)-b) 之后 (按升序排列);
我想,我可以使用java.util.Comparator做到這一點,但我仍然不明白它是如何工作的。 有人可以解釋嗎? 或者,也許還有另一種方法? 謝謝!
是的,您可以使用比較器。
class MyComparator implements Comparator<Integer> {
private final int b;
public MyComparator(int b) { this.b = b; }
public int compare(Integer o1, Integer o2) {
Integer i1 = Math.abs(o1 - b);
Integer i2 = Math.abs(o2 - b);
return i1.compareTo(i2);
}
}
然后將其插入到Collections調用中:
Collections.sort(a,new MyComparator(50));
這將根據比較器中的條件對Integer
列表進行排序。
提供Collections#sort
的自定義Comparator
器:
final int b = ...;
Collections.sort(myList, new Comparator<Integer>() {
@Override
public void compareTo(Integer i1, Integer i2) {
Integer realI1 = (int)Math.abs(i1 - b);
Integer realI2 = (int)Math.abs(i2 - b);
return realI1.compareTo(realI2);
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.