【问题标题】:How to sort the string number in descending order?如何按降序对字符串编号进行排序?
【发布时间】:2014-02-22 03:31:50
【问题描述】:

以下是我的列表,格式始终为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;
    }
};

而且我无法理解如何使它按降序排序,以便我可以从列表中提取第一个索引,这将是最大的字符串编号?

【问题讨论】:

    标签: java string numbers comparator


    【解决方案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));
    

    【讨论】:

      【解决方案2】:

      使用它按降序排序 -

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

      【讨论】:

        【解决方案3】:

        试试这个:

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

        【讨论】:

          【解决方案4】:

          def 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,这意味着这对提问者没有帮助。
          猜你喜欢
          • 2017-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-04
          • 1970-01-01
          • 2015-09-21
          • 2021-05-06
          • 2013-06-05
          相关资源
          最近更新 更多