java - 如何在排序结束时始终有空值

标签 java sorting comparator

我有一个字符串值列表。我使用比较器按如下特定顺序对它们进行排序

public static final List<String> CUSTOM_LIST = Arrays.asList("Red", "Green", "Blue");
comparator = new Comparator<String>(){
             @Override
             public int compare(final String o1, final String o2){
                   return Integer.valueOf(CUSTOM_LIST.indexOf(o1))
                   .compareTo(Integer.valueOf(CUSTOM_LIST.indexOf(o2)));
              }
         };

所以比较一下

Collections.sort(listToSort,comparator);

或者反向排序

Collections.sort(listToSort,Collections.reverseOrder(comparator));

现在我的列表有空值,我希望它们始终位于最后。我该如何实现?

最佳答案

比较接口(interface)返回一个数字,标记两个对象之间的差异。请注意,由于总是希望空值位于末尾,因此我们必须确保返回的整数值大于(或小于)任何其他整数值,这样所有空值都将被拉到 Collection.

 comparator = new Comparator<String>(){
                @Override
                public int compare(final String o1, final String o2){
                    if(o1.isEmpty()) return Integer.MAX_VALUE;
                    else if (o2.isEmpty()) return Integer.MIN_VALUE;

                    else return Integer.valueOf(ModuleConstants.CUSTOM_LIST.indexOf(o1))
                                        .compareTo(
                           Integer.valueOf(ModuleConstants.CUSTOM_LIST.indexOf(o2)));
                }
            };

关于java - 如何在排序结束时始终有空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15389187/

相关文章:

java - OSGi ServiceTracker modifiedService() 方法何时真正被框架调用?

java - 使用 Mockito 将参数模拟对象转换为另一个对象

java - 获取 java.lang.IllegalArgumentException : requirement failed while calling Sparks MLLIB StreamingKMeans from java application

c# - 按自定义顺序排序

algorithm - 确定性选择算法的时间复杂度

Java TreeMap 基于值排序去除重复值

java - 如何使用十六进制值在android中的LinearGradient中指定颜色

javascript - 通过纯 JavaScript 对单词数组进行排序

java - 嵌套嵌套比较器类

java - 我的比较器有什么问题?