如果字符串长度相等,则恢复为自然排序顺序

时间:2013-09-22 22:56:08

标签: java sorting comparator performance

我正在尝试读取文件,并比较字符串长度。如果两个字符串长度相同,那么我想按自然排序顺序(按字母顺序)对它们进行排序。

这是我正在研究的比较器的片段。一切都是完整的,减去排序相同长度的字符串。

    Collections.sort(s, new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            return o1.length() - o2.length();
        }
    }); 

感谢任何输入或adivce

2 个答案:

答案 0 :(得分:7)

在比较方法中添加一个if else块。

伪代码:

if lengths are not equal 
   return o1's length compared to o2's length.
else 
   return o1 compared to o2.

我认为你可以弄清楚其余部分。

答案 1 :(得分:1)

因此,就实际代码而言,它将类似于:

    Collections.sort(strList, new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            int returnVal = 0;

            //handle nulls, there's some sample logic:
            if(o1 == null && o2 == null){
                returnVal = 0;
            } else
            if(o1 == null && o2 != null){
                returnVal = 1;
            } else
            if(o1 != null && o2 == null){
                returnVal = -1;
            } else {

                //sort by length
                returnVal = ((Integer)o1.length()).compareTo((Integer)o2.length());
                //if equal length, sort by string
                if(returnVal == 0){
                    returnVal = o1.compareTo(o2);
                }

            }
            return returnVal;
        }
    });

我还添加了空检查的逻辑,并将它们移动到排序列表的末尾。可能有不同的工具已经执行此操作,您可以调用它。

另请注意,如果您希望字符串比较忽略大小写,请改用String.compareToIgnoreCase()方法。