我有一份清单
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]
任何人都知道如何做到这一点?
答案 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));
}
根据需要添加到空列表的处理。