繁体   English   中英

用Java对2d对象数组进行排序(java.lang.Object)

[英]Sorting a 2d array of Objects in Java (java.lang.Object)

我有一个ArrayList:

ArrayList<Object[][]> parents;

其中列1包含整数的ArrayList,列2包含单个int。 我已经将父母作为对象的ArrayList进行了案例展示,因为它里面的两个对象是从类对象派生的,而不是进行转换的。

这是我遇到的问题,现在我需要按第二列int对父级进行排序,但是在遇到以下错误时遇到了使用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来“杀死”成本最高的玩家。

首先,这不是真正正确的方法。 正如@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设计模式并拥有一个很好的有意义的类来解决您的问题时,为什么还要负担这么多的复杂性呢?

暂无
暂无

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

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