[英]Sorting Array according to ArrayList using comparator
我正在尝试对存储对象的数组(对象命中[])进行排序,我需要按照已排序的 ArrayList 中的确切顺序(升序、降序)进行排序。 这两者没有任何关系。
我见过类似的问题,不同之处在于您使用 Array 中的顺序对 ArrayList 进行排序。 但我想要相反的。 我试图将 ArrayList 转换为简单的 Array 并从那里开始,所以问题变成了“使用另一个数组对数组进行排序”,但这并没有真正帮助我,因为我想要“使用另一个数组对对象数组进行排序”。
Arrays.sort(hits, new Comparator<ArrayList<Double>>() {
@Override
public int compare(ArrayList<Double> c1, ArrayList<Double> c2) {
return Double.compare(c1.get(0), c2.get(0));
}
});
我想要一些与上面代码类似的东西,这给了我当前用作参数的类型的错误“不适用”。
一个Comparator
没有定义在Collection
将要操作的方面; 但就元素而言是要操作的。
因此,您的Comparator
需要类似于Comparator<Double>
而不是Comparator<ArrayList<Double>>
,然后您可以使用它对包括数组在内的任何Collection
进行排序。
以下是一个工作演示,说明如何模糊地使用 SAME Comparator
器对自定义对象List
进行排序以及对相同自定义对象的数组进行排序:
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
public class SortArrayLists {
public static void main(String[] args) {
Comparator<MyObject> comparator = Comparator.comparingDouble(MyObject::getDoubleValue);
MyObject[] array = new MyObject[] {
new MyObject(55),
new MyObject(17.3),
new MyObject(2.43),
new MyObject(375),
new MyObject(100),
new MyObject(255)
};
List<MyObject> list = Arrays.asList(array);
list.sort(comparator);
Arrays.sort(array, comparator);
list.stream().forEach(System.out::println);
System.out.println("\n\n");
Arrays.stream(array).forEach(System.out::println);
}
static class MyObject {
private double doubleValue;
public MyObject(double doubleValue) {
this.doubleValue = doubleValue;
}
public double getDoubleValue() {
return doubleValue;
}
public String toString() {
return doubleValue + "";
}
}
}
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.