需求为:[2GE、21GE、GE、100GE]排序输出为[GE, 2GE, 21GE, 100GE]。
第一时间条件反射写成如下:
import java.util.*;
public class ArraysDemo {
public static void main(String[] args) {
List<String> stringList=new LinkedList<>();
stringList.add("2GE");
stringList.add("21GE");
stringList.add("GE");
stringList.add("100GE");
Collections.sort(stringList);
System.out.println(stringList);
}
}
输出为:
[100GE, 21GE, 2GE, GE]
以上代码无法实现需求,改为以下代码实现:
import java.util.*;
public class ArraysDemo {
public static void main(String[] args) {
List<String> stringList=new LinkedList<>();
stringList.add("2GE");
stringList.add("21GE");
stringList.add("GE");
stringList.add("100GE");
//进行比较
Collections.sort(stringList, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
String ge = (o1.substring(0, o1.indexOf("GE") ))==""?"0":o1.substring(0, o1.indexOf("GE"));
String ge1 = (o1.substring(0, o2.indexOf("GE") ))==""?"0":o1.substring(0, o2.indexOf("GE"));
if(isNumber(ge)&&isNumber(ge1)){
return Integer.parseInt(ge)- Integer.parseInt(ge1);
}else {
return ge.compareTo(ge1);
}
}
});
System.out.println(stringList);
}
/**
* 判断是否为一个数的字符串
* @param num
* @return
*/
static boolean isNumber(String num){
try{
Integer.parseInt(num);
}catch (Exception e){
return false;
}
return true;
}
}
输出结果为:
[GE, 2GE, 21GE, 100GE]