Java:排序列表列表

时间:2014-05-08 20:58:04

标签: list collections

我有一份清单

private LinkedList<LinkedList<Double>> data = 
new LinkedList<LinkedList<Double>>();

这些列表代表列(外部列表)和行(内部列表)。现在我想按行0的值对行进行排序。

修改

新例子:

row0 = [4,2]

row1 = [1,3]

排序后应该看起来像这样。

row0(old row1)= [1,3]

row1(旧row0)= [4,2]

我试过这个: 创建新列并添加值。 data.get()索引一列 data.get()。get()索引一行

for (int i = 0; i < 2; i++) {
    LinkedList<Double> newCol = new LinkedList<Double>();
    data.add(newCol);
}
data.get(0).add(4D);
data.get(0).add(1D);
data.get(1).add(2D);
data.get(1).add(3D);

排序我写了这段代码

Collections.sort(data, new Comparator<List<Double>>()
            {
              public int compare(List<Double> o1, List<Double> o2)
              {
                @Overrides
                return o1.get(0).compareTo(o2.get(0));
              }
            });

但是这段代码按row0的值对列进行排序。那不是我想要的。

System.out.println(data.get(0).get(0) + " " + data.get(1).get(0));
System.out.println(data.get(0).get(1) + " " + data.get(1).get(1));

输出结果为:

row0 = [2,4]

row1 = [3,1]

任何人都知道如何做到这一点?

3 个答案:

答案 0 :(得分:2)

试试

public void testSO() {
    LinkedList<LinkedList<Double>> data =
            new LinkedList<>();

    LinkedList l1 = new LinkedList<Double>();
    l1.add(1D);
    l1.add(5D);
    l1.add(3D);

    LinkedList l2 = new LinkedList<Double>();
    l2.add(0D);
    l2.add(3D);
    l2.add(1D);

    LinkedList l3 = new LinkedList<Double>();
    l3.add(2D);
    l3.add(3D);
    l3.add(1D);

    data.add(l1);
    data.add(l2);
    data.add(l3);

    System.out.println("Before sorting :");
    for (LinkedList<Double> list : data) {
        for (Double d : list) {
            System.out.print(d + " ");
        }
        System.out.println();
    }

    Collections.sort(data, new Comparator<LinkedList<Double>>() {
        @Override
        public int compare(LinkedList<Double> o1, LinkedList<Double> o2) {
            try {
                return o1.get(0).compareTo(o2.get(0));
            } catch (NullPointerException e) {
                return 0;
            }
        }
    });

    System.out.println("After sorting :");
    for (LinkedList<Double> list : data) {
        for (Double d : list) {
            System.out.print(d + " ");
        }
        System.out.println();
    }
}

答案 1 :(得分:1)

使用比较器Sorting a list of non-comparable elements这是您正在寻找的完整示例。

public class Test {
    public static void main(String args[])
    {
        LinkedList<LinkedList<Double>> data =
                new LinkedList<LinkedList<Double>>();
        LinkedList<Double> row1 = new LinkedList<>();
        row1.add(1d); row1.add(5d); row1.add(3d);
        LinkedList<Double> row2 = new LinkedList<>();
        row2.add(0d); row2.add(3d); row2.add(1d);
        LinkedList<Double> row3 = new LinkedList<>();
        row3.add(2d); row3.add(3d); row3.add(1d);
        data.add(row1); data.add(row2); data.add(row3);
        System.out.println("Before the sort:"+ data);
        Collections.sort(data, new Comparator<LinkedList<Double>>() {
            @Override
            public int compare(LinkedList<Double> o1, LinkedList<Double> o2) {
                return (int)(o1.get(0) - o2.get(0));
            }
        });
        System.out.println("After the sort:"+ data);
    }
}

答案 2 :(得分:0)

使用具有以下比较方法的比较器:

public int compare(List<Double> l1, List<Double> l2){
     return l1.get(0).compareTo(l2.get(0));
}

根据需要添加到空列表的处理。