如何按降序对字符串数字进行排序?

时间:2014-02-22 03:31:50

标签: java string numbers comparator

以下是我的列表,其中始终采用bXXXX -

的形式
List<String> data = Arrays.asList("b5", "b10", "b2", "b1", "b40");
System.out.println(data);

我的data列表将始终包含bXXXX

形式的字符串

现在我需要按降序对上面的列表进行排序,并从中提取最大的字符串..

所以在上面的例子中,它将是b40 ..所以下面是我正在使用的比较器,它按升序对所有内容进行排序 -

static final Comparator<String> aStringComparator = new Comparator<String>() {
    public int compare(String s1, String s2) {
        //assumed input are strings in the form axxxx
        int numfromS1 = Integer.valueOf(s1.subSequence(1, s1.length()).toString());
        int numfromS2 = Integer.valueOf(s2.subSequence(1, s2.length()).toString());
        return numfromS1 - numfromS2;
    }
};

我无法理解如何将其按降序排序,以便我可以从列表中提取最大字符串数的第一个索引?

4 个答案:

答案 0 :(得分:1)

如果您的比较器按升序运行,那么您需要做的就是反转比较器的结果。

如果此代码适合您:

return numfromS1 - numfromS2;

然后将其更改为:

return numfromS2 - numfromS1;

或者,或许更为惯用:

return (numfromS2 < numfromS1) ? -1: (numfromS2 > numfromS1) ? 1 : 0;

现在您的数据将按降序排列。

您也可以按照其他人的建议使用:

return ((Integer) numfromS2).compareTo(numfromS1);

或:

Collections.sort(data, Collections.reverseOrder(aStringComparator));

答案 1 :(得分:1)

试试这个:

    Collections.sort(data, new Comparator<String>() {
        @Override
        public int compare(String s1, String s2) {
            int n1 = Integer.parseInt(s1.substring(1));
            int n2 = Integer.parseInt(s2.substring(1));
            return Integer.compare(n2, n1);
        }});

答案 2 :(得分:1)

使用此按降序排序 -

Collections.sort(data, Collections.reverseOrder(aStringComparator));

答案 3 :(得分:0)

def Descending_Order(num):&gt; #num = 18902

l = list(map(int, str(num)))            >  # [1, 8, 9, 0, 2]

r = sorted(l,reverse=True)              > # [9, 8, 2, 1, 0]

ch_r = map(str, r)                      > # ['9', '8', '2', '1','0']

num_r =''.join(ch_r)                    > # '98210'

return int(num_r)                       > # 98210