【问题标题】:Sorting a 2D arraylist based on first element of nested arraylist根据嵌套数组列表的第一个元素对二维数组列表进行排序
【发布时间】:2012-03-29 13:41:36
【问题描述】:

我遇到了一个问题,原来的二维数组列表在排序后以以下格式输出:

[639.5, 134, -2]
[639.524, 131, -1]
[640.478, 179, -2]
[647.968, 192, -2]
[649.068, 199, -2]
[65.581, 3, -1]
[66.387, 6, -1]
[66.726, 7, -1]
[660.182, 194, -1]

我只想根据第一列进行排序。因此,我的预期结果应该是这样的:

[65.581, 3, -1]
[66.387, 6, -1]
[66.726, 7, -1]
[639.5, 134, -2]
[639.524, 131, -1]
[640.478, 179, -2]
[647.968, 192, -2]
[649.068, 199, -2]
[660.182, 194, -1]

Collections.sort() 方法以某种方式对列表进行排序,就好像它是一个字符串一样,因此“0”大于“.”,不知道第一列是由双精度值组成的。任何人都可以帮助我吗?谢谢!

【问题讨论】:

  • 我们能看到您用来对这些数据进行排序的代码吗?这会有所帮助。也许在pastebin
  • 这是原始未排序的二维数组列表:pastebin.com/aUaHaNdL 请注意,每一行都是父数组列表中的一个元素。每行都有一个包含 3 个元素的数组列表。这就是我们获得二维数组列表的方式。我在使用 Collections.sort 后得到了这个...pastebin.com/PaxjQQS2我在 java 中这样做。
  • 我更倾向于创建、修改和排序列表的代码,但这很有帮助。 :P 最有可能的是,您最终将不得不创建自己的排序函数。 Here's a blog post where someone appears to be doing what you want.
  • 原始列表和排序列表的格式如下: ArrayList originalList = new ArrayList(); ArrayList finalList = new ArrayList();整个代码有很多冗余信息,所以我希望这样做。呵呵。
  • 我的代码在这里,排序方法在底部,我已经删除了我的非工作代码...pastebin.com/zpp1Zw1G

标签: java list sorting arraylist 2d


【解决方案1】:

使用 Double.compare() 方法.... 在此方法中传递第一列值它将起作用...

例如:

在主文件中:

 Collection.sort(arraylist variable,new PositionComparator());

其他类:

public class PositionComparator implements Comparator ArrayList<ArrayList> {
    public int compare(ArrayList<ArrayList> o1, ArrayList<ArrayList> o2) {
        double val1, val2;
        val1 = Double.parseDouble(o1.get("your first value"));
        val2 = Double.parseDouble(o2.get("your second value"));
        return Double.compare(val1, val2);
    }
}

希望这会有所帮助...

【讨论】:

  • 谈到 hashmap 和其他东西时,我几乎是个白痴,你能在这里看看我的代码吗?底部方法是我打算排序的地方。我已经在那里删除了我的非工作代码。 pastebin.com/zpp1Zw1G
  • 嘿,我是来帮你的...不是来给你写代码的...至少尝试一次...如果卡住我会帮忙...
  • 再次查看编辑后的代码......并尝试一次......你一定会这样做......
  • 我遇到这个错误:找不到符号符号:方法排序(java.util.ArrayList,PositionComparator)位置:接口java.util.Collection
  • 我认为你的 Collection.sort(arraylist variable,new PositionComparator());具有一维数组列表而不是二维的输入。我的是二维的。
【解决方案2】:

Collection.sort 按自然顺序对列表进行排序,因此您可能想尝试覆盖 compareTo() 方法

【讨论】:

  • 是的,我在某处读到过。我不知道如何去做你建议的事情。 :( 我可以在 excel 中轻松做到这一点,但我宁愿让整个程序在 java 中运行,而不需要中途在 excel 中进行后期处理。
猜你喜欢
  • 2011-05-21
  • 2018-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
相关资源
最近更新 更多