字符串排序空值

Stu*_*ner 7 java sorting arraylist

我有一个带有一些null值和一些字符串的字符串arraylist .我不想对arraylist进行排序,但是我应该对arraylist进行排序,以便将null值放在最后.让我们说arraylist是{1,2,null,6,5,null, 3},我应该最后得到空值 {1,2,6,5,3,null,null}.

解决方案,我目前有:现在,我正在构建新的arraylist,如果值是null,我不是把它推到新列表,否则我将它添加到新的arraylist.

还有其他更好的解决方

谢谢您的帮助.

Vir*_*ade 11

如果您使用的是Java 8,则可以轻松构建所需的比较器:

Arrays.sort(stringArray, Comparator.nullsLast(Comparator.naturalOrder()));
Run Code Online (Sandbox Code Playgroud)

但是如果你不使用java 8,你可以使用下面的比较器

public class StringNullComparator implements Comparator<String> {
    public int compare(String stringOne, String stringTwo) {
        if (stringOne != null && stringTwo != null)
            return stringOne.compareTo(stringTwo);
        return (stringOne == stringTwo)?0:(stringOne==null? 1 : -1);
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以按照以下说明使用

Arrays.sort(stringArray, new StringNullComparator());   
Run Code Online (Sandbox Code Playgroud)


sch*_*ggl 6

自定义比较器传递给排序:

public class StringComparator implements Comparator<String> {
    public int compare(String s1, String s2) {
        if (s1 != null && s2 != null)
            return s1.compareTo(s2);
        return (s1 == null) ? 1 : -1;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后:

Collectios.sort(list, new StringComparator());
Run Code Online (Sandbox Code Playgroud)