我有ArrayList <Integer> a
,其中包含100个随机项[0:100]项目可以重复。
另外,我有int b = 50
。我想按照此表达式结果的升序顺序对 ArrayList 中的项目进行排序:
Math.abs (ArrayList.get(index) - b);
例如:
65 84 33 18 77...
-
15 34 17 32 27
- Math.abs(ArrayList.get(index) - b)之前;
65 33 77 18 84...
-
15 17 27 32 34
- Math.abs(ArrayList.get(index) - b)之后(按升序排列);
我认为,我可以使用 java.util.Comparator 来做到这一点,但我仍然不了解它是如何工作的。有人可以解释这个吗?或者,也许还有另一种方式?谢谢!
答案 0 :(得分:3)
是的,你可以使用比较器。
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
列表进行排序。
答案 1 :(得分:2)
为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);
}
});