【问题标题】:How to sort a multi-dimensional Arraylist "ArrayList<String[]>" in Java?如何在 Java 中对多维 Arraylist“ArrayList<String[]>”进行排序?
【发布时间】:2019-09-26 14:57:36
【问题描述】:

我编写了一个代码,通过每个 String[] 的第一个元素对多维 ArrayList ArrayList&lt;String[]&gt; 进行排序,2dArray 如下所示:

{
 ["Mark", "mark@mail.com"],
 ["Angela", "zzAngela@gmail.com"],
 ["Harry", "abc_harry@hotmail.com"],
 ["Donald","donny@aol.com"]
}

但是当我运行代码时,数组没有得到排序,有人可以解释我的代码有什么问题吗?已经谢谢你了!

ArrayList<String[]> sorter = new ArrayList<String[]>();
String file_name = "db_email.csv";

// READING FROM CSV FILE & STORING DATA INTO 2dARRAY
try{

    BufferedReader reader = new BufferedReader(new FileReader (file_name));

    String line = reader.readLine(); // read the rest
    String[] row;

    while(line != null){

    String[] result = line.split(","); 
    sorter.add(new String[]{result[0], result[1]});
    line = reader.readLine();
    }

    reader.close(); 
} catch (IOException e){
    System.out.println(e);
}

// MY SORTING ALGORITHM
Collections.sort(sorter, new Comparator<String[]>() { 

    @Override
    public int compare(String[] o1, String[] o2) {
        return o1[0].compareTo(o2[0]);
    }               
});
// EXPECTED RESULT (sorting 2dArray by 1st column):
{
 ["Angela", "zzAngela@gmail.com"],
 ["Donald","donny@aol.com"],
 ["Harry", "abc_harry@hotmail.com"],
 ["Mark", "mark@mail.com"]
}

// ACTUAL RESULT (the array doesn't get sorted):
{
 ["Mark", "mark@mail.com"],
 ["Angela", "zzAngela@gmail.com"],
 ["Harry", "abc_harry@hotmail.com"],
 ["Donald","donny@aol.com"]
}

【问题讨论】:

  • 为什么你使用数组来存储数据,而不是为你的ArrayList创建Person对象?你的文件内容是什么?
  • 当我在本地运行代码并在调用Collections.sort() 后转储“sorter”的内容时,您的代码会产生预期的结果。
  • 它按预期工作。你确定在调用sort之前没有print ArrayList?
  • @HieuHT 与 for 循环我再次打印 sorter,但它没有改变任何东西
  • @rgettman 我最近会重写 CSV 文件,我只是使用数组来临时存储值

标签: java sorting arraylist multidimensional-array


【解决方案1】:

我终于解决了这个问题,我正在通过添加“aaaaa,myname@mail.com”之类的行来测试排序算法。我不知道大小写问题(可能 bc 它比较数字 Unicode 值),因此上面的行总是放在最后。当我使用像“Peter White,peter@me.com”这样的正常线路进行测试时,它按预期工作。

感谢大家的帮助和建议!

【讨论】:

    猜你喜欢
    • 2016-08-28
    • 2012-03-24
    • 2013-09-09
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 2012-04-19
    • 2019-10-05
    • 1970-01-01
    相关资源
    最近更新 更多