以下是我的列表,其中始终采用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;
}
};
我无法理解如何将其按降序排序,以便我可以从列表中提取最大字符串数的第一个索引?
答案 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