在项目中我们经常会遇到需要排序对象数组的情况,下面有两个案例分别是前后端的。
在js中比较两个对象数组:
- 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
- 若 a 等于 b,则返回 0。
- 若 a 大于 b,则返回一个大于 0 的值。
var array1 = [
{cashIncount:"151",physicalPosition:"1",Values:{text:"100"}},
{cashIncount:"50",physicalPosition:"1",Values:{text:"50"}},
{cashIncount:"10",physicalPosition:"1",Values:{text:"20"}},
{cashIncount:"1",physicalPosition:"1",Values:{text:"10"}}
];
//如果对其进行排序,则必须使用该参数,也就是一个函数
array1 .sort(function(a,b){
return a.Values.text*1 >= a.Values.text*1 ? 1:-1;//大于则为正数则往后排,所以是从小到大排序
})
在java中比较两个对象数组:
在java中通常会分为普通数组与对象数组,普通数组可以直接调用Arrays类调用sort(数组),这里私有化构造方法,单例类直接调用排序的方法,而对象数组也可以调用此方法(重载:参数类型不同),而数组对象要想实现需要实现Compare接口(String,Interager也实现了此接口,也就是说这些类的对象数组也可以调用public static void sort(Object[] a))
public class MoneyBox implements Comparable<MoneyBox>{
private String name;
private double price;
private MoneyBox(String name, double price) {
super();
this.name = name;
this.price = price;
}
@Override
public String toString() {
return "MoneyBox [name=" + name + ", price=" + price + "]";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public int compareTo(MoneyBox o) {
if(this.price > o.price){
return 1;
}else if(this.price < o.price){
return -1;
}else{
return 0;
}
}
public static void main(String[] args) {
MoneyBox[] MoneyBox = new MoneyBox[]{new MoneyBox("钱箱1",10.1),new MoneyBox("钱箱2",10.2),new MoneyBox("钱箱3",10.3)};
Arrays.sort(MoneyBox);
String s = Arrays.toString(MoneyBox);
System.out.println(s);
}
//[MoneyBox [name=钱箱1, price=10.1], MoneyBox [name=钱箱2, price=10.2], MoneyBox [name=钱箱3, price=10.3]]
}
如果是对象排序,一般都是用TreeSet<Object> 来去重且排序。Object来实现compare接口,String类与Integeer都实现了此方法,所以如果是String和Itegeer可以直接拿来用。