gpt4 book ai didi

java - 使用比较器根据 ArrayList 对数组进行排序

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:05:46 26 4
gpt4 key购买 nike

我正在尝试对存储对象的数组 (Object hits[]) 进行排序,我需要按照已经排序的 ArrayList 中的确切顺序(升序、降序)进行排序。这两者没有任何关系。

我见过类似的问题,不同之处在于您使用数组中的顺序对 ArrayList 进行排序。但我想要相反的东西。我试图将 ArrayList 转换为简单的数组并从那里开始,所以问题变成了“使用另一个数组对数组进行排序”,但这并没有真正帮助我,因为我想要“使用另一个数组对对象数组进行排序”。

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));
}
});

我想要上面代码中的一些东西,它给我当前用作参数的类型的错误“不适用”。

最佳答案

A 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 + "";
}
}
}

Complete code on GitHub

希望这对您有所帮助。

关于java - 使用比较器根据 ArrayList 对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56206814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com