ArrayList<String> list = new ArrayList<>();
for (int e = 0; e <= 10; e++) {
list.add(String.valueOf(e));
}
Collections.sort(list);
System.out.println("Sorted as strings: " + list);
Collections.sort(list, Comparator.comparingInt(Integer::parseInt));
System.out.println("Sorted numerically: " + list);
Выход:
Sorted as strings: [0, 1, 10, 2, 3, 4, 5, 6, 7, 8, 9]
Sorted numerically: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Comparator.comparingInt
является новым в Java 8 и может быть доступно только в новых версиях Android. Эквивалент Java 7 более простой, но существует. Ваша поисковая система может помочь.
Более позолоченное решение: спроектируйте класс модели и составьте список экземпляров этого класса, а не список строк. Пусть ваш класс включает Instant
время создания, чтобы вы могли сортировать по нему.
Не могли бы вы привести пример?
Редактировать: вот простой пример класса модели. Вы лучше знаете, какие у вас записи и что нужно указывать в записи.
public class Entry {
String name;
final Instant created = Instant.now();
public Entry(String name) {
this.name = name;
}
public String getName() {
return name;
}
public Instant getCreated() {
return created;
}
@Override
public String toString() {
return name;
}
}
Помещение экземпляров этого класса в список и сортировка его:
ArrayList<Entry> list = new ArrayList<>();
for (int e = 0; e <= 10; e++) {
list.add(new Entry(String.valueOf(e)));
}
Collections.sort(list, Comparator.comparing(Entry::getName));
System.out.println("Sorted by name: " + list);
Collections.sort(list, Comparator.comparing(Entry::getCreated));
System.out.println("Sorted by creation time: " + list);
Так как метод toString
класса модели просто печатает имя (не время создания), вывод очень похож на то, что было раньше:
Sorted by name: [0, 1, 10, 2, 3, 4, 5, 6, 7, 8, 9]
Sorted by creation time: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Если вы хотите увидеть, что мы действительно отсортировали наши собственные объекты, а не строки, вы можете поэкспериментировать с изменением метода toString
. Пример:
@Override
public String toString() {
return name + ' ' + created.atZone(ZoneId.of("Pacific/Niue"));
}