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

时间:2019-05-19 10:15:02

标签: java arrays sorting arraylist comparator

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

我看到了类似的问题,不同之处在于您使用ArrayList中的顺序对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));
        }
    });

我想要上面代码中的某些内容,这使我使用当前用作参数的类型的错误“不适用”。

1 个答案:

答案 0 :(得分:1)

未根据Comparator进行操作来定义Collection;但是就 elements 而言。

因此,您的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 + "";
        }
    }
}

希望这会有所帮助。