繁体   English   中英

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

[英]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 + "";
        }
    }
}

GitHub 上的完整代码

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM