先按照字符串进行排序,然后按照后面数字进行排序
使用普通的排序方式 例如:
List<String> bsmList = new ArrayList<>();
bsmList.add(“a1”);
bsmList.add(“a2”);
bsmList.add(“a3”);
bsmList.add(“a10”);
bsmList.add(“a11”);
bsmList.stream().sorted((a,b)->a.compareTo(b)).collect(Collectors.toList())
结果:a10会排在a2前面 不符合要求
使用下面代码:
/**
* 数据排序
* @param list
* @return
*/
private List<String> sortStrList(List<String> list){
// 用了一个Comparetor
Comparator com = new Comparator() {
@Override
public int compare(Object o11, Object o22) {
String o1 =o11.toString();
String o2 =o22.toString();
// 前面3个IF主要是判空的
if (o1 == null) { return 1; }
if (o2 == null) { return -1; }
if (o1.equals(o2) ) { return 0; }
// 这里没有做太多的判断, index 代表第几个开始是数字, 直接从后面遍历
int index = 0;
for (index = o1.length() - 1; index >= 0 && (o1.charAt(index) >= '0' && o1.charAt(index) <= '9'); index--) ;
int num1 = Integer.parseInt(o1.substring(index + 1));
String startZm = o1.replace(num1+"","");
for (index = o2.length() - 1; index >= 0 && (o2.charAt(index) >= '0' && o2.charAt(index) <= '9'); index--) ;
int num2 = Integer.parseInt(o2.substring(index + 1));
String endZm = o2.replace(num2+"","");
if(startZm.equals(endZm)){
return num1 - num2;
}
return startZm.compareToIgnoreCase(endZm);
}
};
Collections.sort(list, com);
return list;
}
结果:a1,a2,a3,a10,a11