如何将字符串数字按降序排序?

4
以下是我的列表,它始终以 bXXXX 的形式存在 -
List<String> data = Arrays.asList("b5", "b10", "b2", "b1", "b40");
System.out.println(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个回答

2
如果您的比较器按升序工作,那么您需要做的就是反转比较器的结果。
如果此代码适用于您:
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

试试这个:

    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);
        }});

1
使用此功能按降序排序 -
Collections.sort(data, Collections.reverseOrder(aStringComparator));

0

def Descending_Order(num): > # num = 18902

定义降序函数Descending_Order(num): > # 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

这个问题被标记为 java,这意味着对提问者没有帮助。 - 2Cubed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接