我有一个字符串列表,如下:
(2D, 1D, 1Y, 23M, 4M, 2Y, 12D)
如何按字母顺序然后按数字排序?
我期待
(1D, 2D, 12D, 4M, 23M, 1Y, 2Y)
我尝试过,但没有成功。
Collections.sort(myList, new MyComparator());
public class MyComparator implements Comparator {
@Override
public int compare(Object o1, Object o2) {
String s1 = (String)o1;
String s2 = (String)o2;
String strPart1 = s1.split("")[1];
int intPart1 = Integer.parseInt(s1.split("")[0]);
String strPart2 = s2.split("")[1];
int intPart2 = Integer.parseInt(s2.split("")[0]);
int strCompareResult = strPart1.compareTo(strPart2);
if(0 == strCompareResult )
{
return intPart1 - intPart2;
}
else
{
return strCompareResult;
}
}
}
然而这并没有奏效。
最佳答案
您可以先按最后一个字符排序,然后将其他字符解析为 int
。使用 Comparator.comparing
和 .thenComparing
方法可以更轻松地编写 Comparator
。
myList.sort(Comparator.comparing((String s) -> s.charAt(s.length() - 1))
.thenComparingInt(s -> Integer.parseInt(s.substring(0, s.length() - 1))));
关于java - 如何按先数字字母后数字对字符串列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76721424/