【问题标题】:Sorting Array according to ArrayList using comparator使用比较器根据 ArrayList 对数组进行排序
【发布时间】:2019-05-19 10:15:01
【问题描述】:

我正在尝试对存储对象的数组 (Object hits[]) 进行排序,并且我需要按照已经排序的 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));
        }
    });

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

【问题讨论】:

  • 问题不清楚。数组中项目的类型是什么?是Double 吗?您想对数组进行排序以匹配列表中项目的顺序吗?
  • 和已经排序的ArrayList一样。意思和另一个数组列表中的顺序一样?
  • 我也看不懂这个问题,也许你可以添加一个例子来帮助我们理解你想要什么?
  • 除了Object 的属性之外,您不能对Objects 的数组进行排序
  • 请提供一些示例数据,以便我们了解您的问题。目前,尚不清楚双精度列表如何与对象数组相关。

标签: java arrays algorithm design-patterns collections


【解决方案1】:

Comparator 未定义为 Collection 将要运行;但就 元素而言 将对其进行操作。

因此,您的Comparator 需要类似于Comparator&lt;Double&gt; 而不是Comparator&lt;ArrayList&lt;Double&gt;&gt;,然后您可以使用它对任何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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-17
    • 2018-11-25
    • 2020-05-28
    • 2014-04-14
    • 1970-01-01
    相关资源
    最近更新 更多