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

out*_*lou 2 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)));
              }
         };
Run Code Online (Sandbox Code Playgroud)

所以要比较一下

Collections.sort(listToSort,comparator);
Run Code Online (Sandbox Code Playgroud)

或者用于反向排序

Collections.sort(listToSort,Collections.reverseOrder(comparator));
Run Code Online (Sandbox Code Playgroud)

现在我的列表中有空值,我希望它们总是在最后.我如何实现这一目标?

Sed*_*nus 6

compare接口返回一个标记两个对象之间差异的数字.请注意,因为总是希望空值在最后,我们必须确保返回的整数值比任何其他值更大(或更小),所有空值都将被拉到一个角落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)));
                }
            };
Run Code Online (Sandbox Code Playgroud)

  • 不总是.根据定义,返回0表示相等,正数表示较大,负数表示较小.许多自定义实现都按照您的说法执行,它可以适用于您的情况,但只是为了保持一致性. (2认同)