我有一个字符串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
答案 0 :(得分:311)
自定义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);
答案 1 :(得分:186)
最简单的事情是:
Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
答案 2 :(得分:29)
试试这段代码
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
}
}
答案 3 :(得分:10)
基于上面提到的答案,我设法比较了我的自定义类对象:
hashCode
答案 4 :(得分:4)
您需要使用自定义比较器,它将使用compareToIgnoreCase
,而不是比较。
答案 5 :(得分:2)
从 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]
答案 6 :(得分:1)
不幸的是,到目前为止,所有答案都没有考虑到"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
)。这使得排序不确定。
方法3(使用java.text.Collator)是恕我直言正确执行此操作的唯一方法,因为它认为"a"
和"A"
不相等,但根据当前(或任何其他所需的)语言环境。
答案 7 :(得分:0)
KOTLIN开发人员
对于客户列表,如果您要基于一个字符串进行排序,则可以使用以下方法:
phoneContactArrayList.sortWith(Comparator { item, t1 ->
val s1: String = item.phoneContactUserName
val s2: String = t1.phoneContactUserName
s1.compareTo(s2, ignoreCase = true)
})
答案 8 :(得分:0)
def lst = ["A2", "A1", "k22", "A6", "a3", "a5", "A4", "A7"];
println lst.sort { a, b -> a.compareToIgnoreCase b }
这应该能够区分大小写,但是我不确定如何处理字母数字字符串列表
答案 9 :(得分:0)
科特林。按字符串字段对对象进行排序,不区分大小写。
items?.sortedWith { o1, o2 ->
o1.name.compareTo(o2.name, true)
}