Так как вы передаете строки, коллекция не может сказать, как вы хотите, чтобы эти строки интерпретировались (то есть сортировать по числу, присутствующему в строке). Вы должны быть более явным.
У вас есть два варианта:
Опция 1 : создать новый тип данных для инкапсуляции имени и числа и выполнить сравнение по номеру:
public class Person implements Comparable<Person> {
private String name;
private int number;
public Person(String name, int number) {
this.name = name;
this.number = number;
}
public int compareTo(Person p) {
return this.number.compareTo(p.number);
}
}
Тогда:
List<Person> persons = new ArrayList<Person>();
persons.add(new Person("alice", 11));
persons.add(new Person("katy", 1));
// etc.
Collections.sort(persons);
Вариант 2 : превратить строку в пару ключ-значение и поместить ее в TreeMap
, который автоматически сохраняет значения, отсортированные по ключу:
TreeMap<Integer, String> map = new TreeMap<Integer, String>();
map.put(11, "alice");
map.put(1, "katy");
// etc.