У меня есть список строк, names
который содержит имена людей. Я хочу отсортировать Arraylist в алфавитном порядке.
ArrayList<String> names = new ArrayList<String>();
names.add("seetha");
names.add("sudhin");
names.add("Swetha");
names.add("Neethu");
names.add("ananya");
names.add("Athira");
names.add("bala");
names.add("Tony");
names.add("Karthika");
names.add("Nithin");
names.add("Vinod");
names.add("jeena");
Collections.sort(names);
for(int i=0; i<names.size(); i++)
System.out.println(names.get(i));
Я попытался отсортировать список указанным выше способом. Но он отображает отсортированный массив как:
Athira
Karthika
..
..
ananya
bala
...
но я не хочу делать его чувствительным к регистру. Я хочу получить такой результат:
ananya
Athira
bala
for (TYPE newvariable : ARRAYTYPE arrayname) { Log.i("YOURAPPTAG", newvariable); }
String.CASE_INSENSITIVE_ORDER
, то вы увидите, что A1 используется,less
чем A10, только потому, что длина меньше. Из коробки нет поддержки «естественной сортировки», возможно, вы захотите взглянуть на stackoverflow.com/questions/1262239/…Самое простое, что нужно сделать:
источник
попробуйте этот код
источник
Основываясь на вышеупомянутых ответах, мне удалось сравнить мои пользовательские объекты класса следующим образом:
источник
Вам нужно использовать собственный компаратор, который будет использовать
compareToIgnoreCase
, а не compareTo.источник
Начиная с Java 8 вы можете использовать
Stream
:Он получает поток от этого
ArrayList
, затем сортирует его (игнорируя регистр). После этого поток преобразуется в массив, который преобразуется в файлArrayList
.Если вы распечатаете результат, используя:
вы получите следующий результат:
источник
К сожалению, пока что все ответы не учитывают то, что
"a"
нельзя считать равным,"A"
когда дело доходит до сортировки.В подходе 1 любые строчные буквы считаются большими, чем любые прописные.
Подход 2 усугубляет ситуацию, поскольку CASE_INSENSITIVE_ORDER считает
"a"
и"A"
равными (результат сравнения равен0
). Это делает сортировку недетерминированной.Подход 3 (с использованием java.text.Collator) - это ИМХО единственный способ сделать это правильно, поскольку он учитывает
"a"
и"A"
не равняется, а помещает их в правильном порядке в соответствии с текущим (или любым другим желаемым) Locale.источник