2015-04-03 2 views
0

В ArrayList У меня есть три двойных [] массива, которые я хочу сортировать по третьему массиву. Третий массив также несортирован.Сортировка трех массивов по индексу ArrayList (строка) на одном массиве

public class LevelList extends ArrayList<double[]> { 

Мой компаратор compares doubles:

import java.util.Comparator; 

public class Linearize { 
    static final Comparator<double[]> RATIO_ORDER = 
      new Comparator<double[]>() { 
       @Override 
       public int compare(double[] d1, double[] d2) { 
        //Sort the ratios based on the fraction column 2 
        return Double.compare(d1[2], d2[2]); 
       } 
     }; 
} 

Я тогда звоните:

Collections.sort(levelList, Linearize.RATIO_ORDER); 
levelList.println(); 

Однако, это только приводит к сортировке порядка массивов в ArrayList.

В псевдокоде, что я хочу достичь, это:

For Each Row of ArrayList at Index i 
Sort on Array 3 

Так что этот вход:

[1.0][2.0][2.1] 
[2.0][5.0][2.2] 
[1.0][5.0][1.0] 

становится:

[1.0][5.0][1.0] 
[1.0][2.0][2.1] 
[2.0][5.0][2.2] 

потому что: 2.2> 2.1> 1.0

+0

Какой желаемый выход? – Eran

+0

Я продемонстрировал это под «становится:» выше. Каждый массив должен быть представлен в столбце, отсортированном по третьему. – noumenal

+0

Я думал, что это был результат, который вы уже получили. – Eran

ответ

1

Я получил d . Я проверил следующий код. Не понял, почему левеллист должен продлить время работы, и, следовательно, удалил это.

public class TestLevelSorting { 
public static void main(String[] args) { 

    List<double[]> levelList = new ArrayList<double[]>(); 

    double[] items1 = {1.0, 2.01, 2.1}; 
    double[] items2 = {2.0, 5.0, 2.2}; 
    double[] items3 = {1.0, 5.0, 1.0}; 

    levelList.add(items1); 
    levelList.add(items2); 
    levelList.add(items3); 

    Collections.sort(levelList, Linearize.RATIO_ORDER); 

    for(double[] item : levelList){ 
     System.out.println(Arrays.toString(item)); 
    } 
} 
} 

class Linearize { 
static final Comparator<double[]> RATIO_ORDER = new Comparator<double[]>() { 
    @Override 
    public int compare(double[] d1, double[] d2) { 
     // Sort the ratios based on the fraction column 2 
     return Double.compare(d1[2], d2[2]); 
    } 
}; 
} 
+0

Это работает для примера. Однако фактические массивы намного длиннее, чем в примере. При вставке фактических массивов вывод выглядит транспонированным. Я не знаю, почему. Есть ли способ вернуть только голову (т. Е. Первые 5 строк) с помощью цикла? – noumenal

+0

Упс. Я неправильно инициализировал размер. А оттуда на него было просто: для (INT I = 0; я <5; я ++) { \t \t \t для (INT O = 0; о <3; о ++) { \t \t \t System.out. print (levelList.get (o) [i] + ","); \t \t} \t \t \t System.out.println(); \t} – noumenal