В ArrayList<ArrayList<Double>> selected
хранится 5 записей. Каждая из этих записей задается двумя параметрами - rank
и cd
:Записи заказов в ArrayList
rank = [1.0, 2.0, 3.1, 1.2, 2.1]
cd = [6.2, 5.2, 7.1, 8.0, 1.1]
Мне нужно заказать эти записи, во-первых, по rank
и вторых, по cd
в порядке убывания (т.е. 3.1, 2.1 , 2.0, 1.2, 1.1). Второй порядок (по cd
) должен применяться к записям, которые уже были заказаны rank
.
ArrayList<Double> rank = new ArrayList<Double>();
ArrayList<Double> cd = new ArrayList<Double>();
ArrayList<ArrayList<Double>> selected = new ArrayList<ArrayList<Double>>();
for (int i=0; i<len; i++) {
rank.add(getRank(i));
cd.add(getCub_len(i));
}
selected.add(0,rank);
selected.add(1,cd);
Comparator<ArrayList<Double>> comparatorRank = new Comparator<ArrayList<Double>>()
{
public int compare(ArrayList<Double> a, ArrayList<Double> b)
{
return (int) (a.get(0) - b.get(0));
}
};
Comparator<ArrayList<Double>> comparatorCD = new Comparator<ArrayList<Double>>()
{
public int compare(ArrayList<Double> a, ArrayList<Double> b)
{
return (int) (a.get(1) - b.get(1));
}
};
Collections.sort(selected, comparatorRank);
Collections.sort(selected, comparatorCD);
Проблема в том, что я не знаю, как получить идентификаторы, которые были назначены для записей перед заказом. Например, это неупорядоченная последовательность идентификаторов: 1, 2, 3, 4, 5, и это последовательность идентификаторов после заказа: 5, 3, 4, 1, 2. Как получить эти идентификаторы?
Похоже, вам нужен класс, который хранит ранг и код одного объекта, так что вы можете иметь список этого объекта. Затем вы просто определяете свой compareTo этого класса, чтобы использовать ранг в качестве поля для сортировки. –
@Kevin Crowell: Не могли бы вы привести пример? Благодарю. –
Проверьте принятый ответ на этот вопрос: http://stackoverflow.com/questions/3718383/java-class-implements-comparable –