异想维度 java_Java实现多字段(维度)复杂排序

//Java 实现多字段排序

HashMap map1 = new HashMap();

map1.put("dataindex0", null);map1.put("dataindex1", 6);map1.put("dataindex2", 1.1);map1.put("id", 1);

HashMap map2 = new HashMap();

map2.put("dataindex0", "2017-12-01");map2.put("dataindex1", 5);map2.put("dataindex2", 1.2);map2.put("id", 2);

HashMap map3 = new HashMap();

map3.put("dataindex0", "2017-12-02");map3.put("dataindex1", 7);map3.put("dataindex2", 2.3);map3.put("id", 3);

HashMap map4 = new HashMap();

map4.put("dataindex0", "2017-12-02");map4.put("dataindex1", 7);map4.put("dataindex2", 3);map4.put("id", 4);

HashMap map5 = new HashMap();

map5.put("dataindex0", "2017-12-03");map5.put("dataindex1", null);map5.put("dataindex2", 9.1);map5.put("id", 5);

HashMap map6 = new HashMap();

map6.put("dataindex0", "2017-12-03");map6.put("dataindex1", 3);map6.put("dataindex2", 8.1);map6.put("id", 6);

List> list = new ArrayList>();

list.add(map6);list.add(map1);list.add(map5);list.add(map4);list.add(map2);list.add(map3);

//         System.out.println("Before Sort: " + list);

final String[] orderByCols = {"dataindex0","dataindex1","dataindex2"};

//         final String[] orderByCols = {"dataindex0","dataindex1"};

//         final String[] orderByCols = {"dataindex0"};

//Mannual OrderBy

Collections.sort(list,new Comparator() {

@Override

public int compare(Map o1, Map o2) {

return recursion(o1, o2, 0);

}

private int recursion(Map o1, Map o2, int i) {

if (o1.containsKey(orderByCols[i]) && o2.containsKey(orderByCols[i])) {

Object value1 = o1.get(orderByCols[i]);

Object value2 = o2.get(orderByCols[i]);

if (value1 == null && value2 == null) {

if ((i+1) < orderByCols.length) {

int recursion = recursion(o1, o2, i+1);

return recursion;

}else{

return 0;

}

}else if(value1 == null && value2 != null){

return 1;

}else if(value1 != null && value2 == null){

return -1;

}else{

if (value1.equals(value2)) {

if ((i+1) < orderByCols.length) {

return recursion(o1, o2, i+1);

}else{

return 0;

}

}else{

if (value1 instanceof String && value2 instanceof String) {

return value1.toString().compareTo(value2.toString());

}else{

return new BigDecimal(value1.toString()).compareTo(new BigDecimal(value2.toString()));

}

}

}

}else{

System.out.println(" ** The current map do not containskey : " + orderByCols[i] + ",or The value of key is null **");

return 0;

}

}

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值