Подскажите пожалуйста, вот есть список в
List<String> list
из таких элементов: n1007, n1001, n6751, n4420, n3347, n9044, n2046.
Как отсортировать элементы этого списка в порядке возрастания по числам, чтобы получилось: n1001, n1007, n2046, n3347, n4420, n6751, n9044?
Я бы предложил своим компаратором воспользоваться. Варианта 2: или оставаться на стрингах
List<String> list = Arrays.asList("n1000", "n110");
Comparator<String> comparator = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// если строки разной длины, то более короткое
// точно меньше, что можно получить сравнением длин
if (o1.length() != o2.length())
return Integer.compare(o1.length(), o2.length());
else
//если длины равны - сравниваем просто как строки
return o1.compareTo(o2);
}
};
Collections.sort(list, comparator);
Или парсить в инты/лонги
List<String> list = Arrays.asList("n1000", "n110");
Comparator<String> comparator = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
//откусываем в o1.substring(1) букву n, парсим число в Long и сравниваем лонги
return Long.compare(Long.parseLong(o1.substring(1)), Long.parseLong(o2.substring(1)));
}
};
Collections.sort(list, comparator);
Что будет быстрее сложно сказать, но я ставлю на первый вариант
list.stream()
.sorted(Comparator.comparingInt(s -> Integer.valueOf(s.substring(1))))
.forEach(System.out::println);
Для сортировки коллекций можно использовать метод Collections.sort(List,Comparator)
. В качестве компаратора в данном случае подойдет String.CASE_INSENSITIVE_ORDER
:
List<String> list =
Arrays.asList("n1007", "n1001", "n6751",
"n4420", "n3347", "n9044", "n2046");
Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
System.out.println(list); // [n1001, n1007, n2046, n3347, n4420, n6751, n9044]
В 8
версии Java
появился метод List.sort
:
list.sort(String.CASE_INSENSITIVE_ORDER);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
У меня учебный проект на Spring MVC и я пытаюсь применить паттерн Chain of responsibilityСоздал пакет handler в котором есть интерфейс Handler
У меня есть класс AppealTemlate, который содержит список сущностей extends AbstractFieldВыглядит это примерно так: