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

标签 java arrays algorithm design-patterns collections

我正在尝试对存储对象的数组 (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/

相关文章:

java - 滚动条不适用于 JTextArea,为什么?

java - 泛型可以避免我传回泛型 'Object' 吗?

java - 方法意外地改变了我的数组的值

java - 从下往上扫描树结构?

java - 如何将迭代器变量作为参数传递给 ActionListener

C- 检查字符串中的字符是否属于数组

java - 如何将未知数量的身份添加到最大数量的列表中

javascript - ES6 减少数组中的嵌套对象

algorithm - 字符串查找/替换算法

algorithm - 线段树、区间树、二进制索引树和范围树之间有什么区别?