如何排序包含空值的字符串值,像100000001这样的长整数值,像vdlv12300这样的字母数字值?(java)

时间:2017-09-28 07:35:23

标签: sorting

我要求它们先按升序排序为整数值,然后是字母数字值,然后是空值。我尝试在java中使用比较器来比较字符串。但结果是扭曲的。然后,我分隔了空值和实际值。我将这些实际值放入树图中,然后检索以按升序排列。得到这个后,我添加了所有空值。问题是所有空值都很好,实际值也是排序的。但1001是在100000001之后。请帮助解决这个问题。我该怎么做才能满足我的要求?

1 个答案:

答案 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