【问题标题】:Sorting a 2d array of Objects in Java (java.lang.Object)在 Java (java.lang.Object) 中对二维对象数组进行排序
【发布时间】:2017-11-27 19:35:54
【问题描述】:

我有一个 ArrayList:

ArrayList<Object[][]> parents;

其中第 1 列包含整数的 ArrayList,第 2 列包含单个 int。我将父母作为对象的 ArrayList,因为其中的两个对象派生自类对象,而不是转换。

这是我遇到问题的地方,现在我需要按第二列(整数)对父母进行排序,但是在使用 java.util.Arrays.sort 时遇到了问题,因为我收到以下错误:

The method sort(T[], Comparator<? super T>) in the type Arrays is not applicable for the arguments (ArrayList<Object[][]>, new Comparator<Integer[]>(){})

有什么办法可以将第二列转换为整数?我们来自包含更通用对象的 ArrayList 的错误

如果这是不可能的,那么更改代码以便对数组进行排序的最佳方法是什么?

请不要从 int[][] 问题的排序中标记为重复,因为我以前没有在这里看到过这个问题。

谢谢!

编辑 - 根据要求,这是我的 ArrayList 的一个示例

[50, 50, 50, 100, 50, 80, 50], 925
[80, 100, 100, 50, 80, 100], 1300
[50, 100, 100, 50, 100, 100], 1200

忽略第一列,我想按第二列排序,如下所示:

[50, 50, 50, 100, 50, 80, 50], 925
[50, 100, 100, 50, 100, 100], 1200
[80, 100, 100, 50, 80, 100], 1200

对于上下文,第一列是引用玩家在游戏中拥有的物品的数组,第二列是它们的成本(越小越好)。我想按此成本列 (2) 对玩家进行排序,当然他们的物品将与他们一起移动到相同的排序行。结果首先按最小排序,因此在锦标赛选择中(这是一种遗传算法),我可以通过修剪 ArrayList 来“杀死”成本最高的玩家。

【问题讨论】:

  • 请添加输入和所需输出的具体示例
  • 你做错了。使用类。使用 List 类型的字段和 int 类型的字段定义一个类 Parent。然后使用 List,并使用 Comparator 对它们进行排序。 Java 是一种面向对象的语言。使用类和对象。
  • @JB Nizet 说了什么。此外,错误消息说程序需要一个数组和一个比较器,比较器应该能够比较数组中的对象。相反,您传递的是ArrayList(不是数组)和Integer[] 类型的比较器。

标签: java arrays sorting arraylist


【解决方案1】:

首先,这并不是真正的正确方法。正如 cmets 中提到的@JB Nizet,您应该创建一个具有适当成员的类,然后创建该类的List。然后可以安全地比较这些列表的元素。

但如果你应该这样做,这里有一个解决方案:

parents.sort(new Comparator<Object[][]>() {
            @Override
            public int compare(Object[][] o1, Object[][] o2) {
                return Integer.compare((int) o1[0][1], (int)o2[0][1]);
            }
        });

您报告的错误消息实际上是指导您创建一个与传递给sort 的对象兼容的比较器。

这根本不安全。这些对象需要完全具有您所指示的格式,否则一切都会崩溃。当然,您可以向覆盖的比较方法添加检查以确保格式正确。但是,当您可以使用简单的 OO 设计模式并拥有一个很好的有意义的类来解决您的问题时,为什么还要让自己承担所有这些复杂性呢?

【讨论】:

    猜你喜欢
    • 2021-07-14
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    • 2015-09-17
    相关资源
    最近更新 更多