【问题标题】:sort object arrays with strings and numbers java [duplicate]用字符串和数字对对象数组进行排序java [重复]
【发布时间】:2021-05-14 01:59:14
【问题描述】:

我也看到过类似的问题,但还是不太明白该怎么做。

    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"}

【问题讨论】:

  • 为 Object 类型实现自己的比较器并使用它。

标签: java arrays sorting object


【解决方案1】:

您可以使用自定义 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;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    相关资源
    最近更新 更多