在ArrayList中的ArrayList的第一个条目上排序

时间:2013-04-17 15:35:54

标签: java sorting arraylist

我有一个ArrayList,它由一个由字符串组成的ArrayList组成:ArrayList<ArrayList<String>>。如何对内部ArrayList的第一个条目进行排序?例如,我想这样:

a = [['1','apple'],['3','pear'],['2','banana'],['1',orange']]

成为:

a_sorted = [['1','apple'],['1','orange'],['2','banana'],['3','pear']]

重复的第一个条目(如appleorange)的顺序无关紧要。我已尝试使用Collections.sort(a,new ColumnComparator()),但它不接受ArrayLists。这是我使用的课程:

public class ColumnComparator implements Comparator<ArrayList<String>>{
    public int compare(ArrayList<String> ar1, ArrayList<String> ar2){
        return ar1.get(0).compareTo(ar2.get(0));
    }
}

4 个答案:

答案 0 :(得分:2)

您可以创建 Map <String, ArrayList<String>> ,将ArrayLists的第一个条目作为键,将ArrayList本身作为值。然后对按键排序地图(使用Sorted MapComparator按地图键排序),您将得到您想要的结果。

答案 1 :(得分:2)

为什么不创建实现Comparable的自定义类,而不是存储数组的数组。例如

class Fruit implements Comparable<Fruit> {
protected int number;
protected String name;

public Fruits(int number, String name) {
    this.number = number;
    this.name = name;
}

@Override
public int compareTo(Fruit f) {
    return number < f.number;
    // or depending on if ascending or descending order wanted
    // return number > f.number 
}
}

然后排序只运行Collections.sort(a)。这种方式灵活且易于扩展。

答案 2 :(得分:0)

为什么不能使用此ArrayList<Map<String,String>>代替ArrayList<ArrayList<String>>。您可以使用TreeMap轻松地在键上对Map进行排序。 注意:这仅在内部arraylist中只有两个条目时才有效。

答案 3 :(得分:0)

如果真的想要这样做,你可以试试这个:

import java.util.Comparator;

public class ColumnComparable implements Comparator<ArrayList<String>>{

    @Override
    public int compare(ArrayList<String> o1, ArrayList<String> o2) {
        return (Integer.parseInt(o1.get(0)) > Integer.parseInt(o2.get(0)) ? -1 : (Integer.parseInt(o1.get(0)) == Integer.parseInt(o2.get(0)) ? 0 : 1));
    }
}

找到了代码here