首页 > 解决方案 > 用字符串和数字对对象数组进行排序java

问题描述

我见过类似的问题,但仍然不太明白如何做到这一点。

    public static Object[] dbSort(Object[] a){
       Arrays.sort(a);
        return a;
    }

当给定一个可以仅包含数字或仅包含字符串或两者的对象数组时,我如何对其进行排序,数字->从最小到最大,字符串根据字母表排序,如果两者都先排序,然后再排序字符串。

在上面的代码中,它仅在它是对象数组中的整数时才有效,否则它会给出错误,因为它也不能对字符串进行排序(我认为)。

这里有一些例子可以更清楚地说明我想要什么。

given {6, 2, 3, 4, 5} should return {2, 3, 4, 5, 6}},


given {14, 32, 3, 5, 5} should return {3, 5, 5, 14, 32}},


given {1, 2, 3, 4, 5} should return {1, 2, 3, 4, 5}


given {"Banana", "Orange", "Apple", "Mango", 0, 2, 2} should return {0, 2, 2, "Apple", "Banana", "Mango", "Orange"}}


given {"C", "W", "W", "W", 1, 2, 0} should return {0,1,2,"C","W","W","W"}

标签: javaarrayssortingobject

解决方案


您可以使用自定义Comparator<Object>和编写逻辑来执行此操作,如下所示

public static Object[] dbSort(Object[] a){
        Arrays.sort(a, new Comparator<Object>() {
            @Override
            public int compare(Object o1, Object o2) {
                if(o1 instanceof Integer && o2 instanceof Integer) {//both are integers
                    return ((int) o1) -  ((int) o2);
                }else if(o1 instanceof Integer){//second is String
                    return -1;
                }else if(o2 instanceof Integer){//first is String
                    return 1;
                }else{//both are Strings
                    return ((String) o1).compareTo((String) o2);
                }
            }
        });
        return a;
    }
}

推荐阅读