我要求它们先按升序排序为整数值,然后是字母数字值,然后是空值。我尝试在java中使用比较器来比较字符串。但结果是扭曲的。然后,我分隔了空值和实际值。我将这些实际值放入树图中,然后检索以按升序排列。得到这个后,我添加了所有空值。问题是所有空值都很好,实际值也是排序的。但1001是在100000001之后。请帮助解决这个问题。我该怎么做才能满足我的要求?
答案 0 :(得分:0)
List<Object> list= new ArrayList<>();
list.add(null);
list.add("1");
list.add("2");
list.add("-2");
list.add("11fff");
list.add("22fff");
Collections.sort(list, (o1, o2) -> {
if(o1==null) return 1;
if(o2==null) return -1;
if(o1.equals(o2)) return 0;
boolean o1_int = ((String)o1).matches("^-?\\d+$");
boolean o2_int = ((String)o2).matches("^-?\\d+$");
if(o1_int && o2_int){
return Integer.parseInt((String)o1)>Integer.parseInt((String)o2)?1:-1;
}
else if(o1_int){
return -1;
}else if(o2_int){
return 1;
}
else {
return ((String) o1).compareTo((String)o2);
}
});
list.forEach(System.out::println);
输出
-2
1
2
11fff
22fff
null