Сортировка ArrayList в алфавитном порядке (без учета регистра)
у меня есть строка arraylist 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
6 ответов:
Custom
Comparatorдолжно помочьCollections.sort(list, new Comparator<String>() { @Override public int compare(String s1, String s2) { return s1.compareToIgnoreCase(s2); } });или если вы используете Java 8:
list.sort(String::compareToIgnoreCase);
попробуйте этот код
Collections.sort(yourarraylist, new SortBasedOnName()); import java.util.Comparator; import com.RealHelp.objects.FBFriends_Obj; import com.RealHelp.ui.importFBContacts; public class SortBasedOnName implements Comparator { public int compare(Object o1, Object o2) { FBFriends_Obj dd1 = (FBFriends_Obj)o1;// where FBFriends_Obj is your object class FBFriends_Obj dd2 = (FBFriends_Obj)o2; return dd1.uname.compareToIgnoreCase(dd2.uname);//where uname is field name } }
основываясь на вышеупомянутых ответах, мне удалось сравнить мои пользовательские объекты класса следующим образом:
ArrayList<Item> itemList = new ArrayList<>(); ... Collections.sort(itemList, new Comparator<Item>() { @Override public int compare(Item item, Item t1) { String s1 = item.getTitle(); String s2 = t1.getTitle(); return s1.compareToIgnoreCase(s2); } });
вам нужно использовать пользовательский компаратор, который будет использовать
compareToIgnoreCase, не compareTo.
начиная от Java 8 можно использовать
Stream:List<String> sorted = Arrays.asList( names.stream().sorted( (s1, s2) -> s1.compareToIgnoreCase(s2) ).toArray(String[]::new) );он получает поток от этого
ArrayList, затем он сортирует его (игнорируя случай). После этого поток преобразуется в массив, который преобразуется вArrayList.если вы печатаете результат через:
System.out.println(sorted);вы получаете следующий результат:
[ananya, Athira, bala, jeena, Karthika, Neethu, Nithin, seetha, sudhin, Swetha, Tony, Vinod]
Comments