Сортировка массива в алфавитном порядке (без учета регистра) - PullRequest
112 голосов
/ 28 апреля 2011

У меня есть строковый массив names, который содержит имена людей. Я хочу отсортировать массив в алфавитном порядке.

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 ]

313 голосов
/ 28 апреля 2011

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);
188 голосов
/ 23 апреля 2012

Самое простое, что нужно сделать:

Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
29 голосов
/ 26 апреля 2012

попробуйте этот код

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
}

}
10 голосов
/ 21 мая 2017

Основываясь на вышеупомянутых ответах, мне удалось сравнить мои пользовательские объекты классов следующим образом:

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);
            }

        });
4 голосов
/ 28 апреля 2011

Вам необходимо использовать пользовательский компаратор, который будет использовать compareToIgnoreCase, а не сравнивать с

2 голосов
/ 05 февраля 2016

Начиная с 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...