Я новичок в написании вопросов здесь, хотя я использовал этот сайт уже некоторое время.Сортировка ArrayList строки [] с использованием нескольких индексов
Я хочу сортировать ArrayList в лексикальном порядке (= естественный порядок ?!) в зависимости от первых двух индексов массива. В настоящее время я использовал код ниже:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
public class SortArrayList {
public static void main(String[] args) {
ArrayList<String[]> workingSet = new ArrayList<>();
workingSet.add(new String[]{"MiningCorp", "2265 Betacity"});
workingSet.add(new String[]{"MiningCorp", "6454 Iotacity"});
workingSet.add(new String[]{"Arbiter", "3812 Gammacity"});
workingSet.add(new String[]{"MiningCorp", "1234 Thetacity"});
workingSet.add(new String[]{"Arbiter", "1812 Deltacity"});
Comparator<String[]> staComp = new Comparator<String[]>() {
@Override
public int compare(String[] first, String[] second) {
String composite1 = first[0] + " " + first[1];
String composite2 = second[0] + " " + second[1];
return composite1.compareTo(composite2);
}
};
Collections.sort(workingSet, staComp);
for(String[] arr : workingSet){
System.out.println(Arrays.toString(arr));
}
}
}
Это должно обеспечить следующий вывод:
[Arbiter, 1812 Deltacity]
[Arbiter, 3812 Gammacity]
[MiningCorp, 1234 Thetacity]
[MiningCorp, 2265 Betacity]
[MiningCorp, 6454 Iotacity]
Это именно то, что я хотел. Есть ли более элегантный способ с использованием заранее подготовленных методов?
Что делать, если я хотел сортировать, группируя по первой записи массива в лексикальном порядке, но внутри этой группы я хочу, чтобы отдельные массивы сортировались по обратному лексикальному порядку? Для этого мне нужен второй компаратор для первой предварительной сортировки записей второго индекса каждого массива?
Вот что я хочу, чтобы получить для этого примера:
[Arbiter, 3812 Gammacity]
[Arbiter, 1812 Deltacity]
[MiningCorp, 6454 Iotacity]
[MiningCorp, 2265 Betacity]
[MiningCorp, 1234 Thetacity]
в то время как лямбда-выражения не являются совершенно новым для меня, это делает его более ясным для меня, как они работают в Java. Спасибо за ваш ответ. –