按字母顺序排列arraylist(不区分大小写)

时间:2011-04-28 07:55:48

标签: java sorting 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

10 个答案:

答案 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.Collat​​or)是恕我直言正确执行此操作的唯一方法,因为它认为"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)
        }