在字母顺序中排序数组列表(不区分大小写)

我有一个包含人名的字符串数组表 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
277994 次浏览

定制 Comparator应该有帮助

Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.compareToIgnoreCase(s2);
}
});

如果你使用的是 Java8:

list.sort(String::compareToIgnoreCase);

您需要使用自定义比较器,它将使用 compareToIgnoreCase,而不是 compareTo。

最简单的方法是:

Collections.sort(list, String.CASE_INSENSITIVE_ORDER);

试试这个代码

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
}


}

爪哇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]

基于上面提到的答案,我设法比较了我的自定义类对象,如下所示:

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


});

不幸的是,到目前为止,所有的答案都没有考虑到,在排序时,"a"不能被认为等于 "A"

String[] array = {"b", "A", "C", "B", "a"};


// Approach 1
Arrays.sort(array);
// array is [A, B, C, a, b]


// Approach 2
Arrays.sort(array, String.CASE_INSENSITIVE_ORDER);
// array is [A, a, b, B, C]


// Approach 3
Arrays.sort(array, java.text.Collator.getInstance());
// array is [a, A, b, B, C]

在方法1中,任何小写字母被认为大于任何大写字母。

方法2使情况变得更糟,因为 CASE _ INSENSITIVE _ ORDER 考虑 "a""A"相等(比较结果是 0) ,这使得排序不确定。

Approach 3 (using a java.text.Collator) is IMHO the only way of doing it correctly, since it considers "a"and "A" not equal, but puts them in the correct order according to the current (or any other desired) Locale.

KOTLIN 开发商

对于 海关清单,如果你想要 基于一个字符串的排序,那么你可以使用这个:

phoneContactArrayList.sortWith(Comparator { item, t1 ->
val s1: String = item.phoneContactUserName
val s2: String = t1.phoneContactUserName
s1.compareTo(s2, ignoreCase = true)
})
def  lst = ["A2", "A1", "k22", "A6", "a3", "a5", "A4", "A7"];


println lst.sort { a, b -> a.compareToIgnoreCase b }

这应该能够排序与大小写不敏感,但我不知道如何处理字母数字字符串列表

Kotlin 按字符串字段对对象排序不区分大小写。

items?.sortedWith { o1, o2 ->
o1.name.compareTo(o2.name, true)
}