java - 用字符串和数字对对象数组进行排序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"}
解决方案
您可以使用自定义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;
}
}
推荐阅读
- sql - 案例陈述选择
- android - MutableLivedata 观察者触发
- android - 将 Theme.DeviceDefault 与 AppCompatActivity 一起使用
- r - 鉴于变量在数据框中的频率,如何更改数据框行中变量的名称?
- java - Java中括号内和括号外的增量索引有什么区别?
- javascript - 无法停止已登录用户的主页重定向路由
- sharepoint - 使用 REST API 获取 Sharepoint 中的人员和组列
- snmp - 华为服务器oid不显示| RH2288
- lua - 调用 String.pack 返回未找到打包方法
- python - 如何在 Tensorflow 中动态创建列表