JAVA版List<Map>排序,按字符或数字类型排序,支持正序倒序

来源:互联网 发布:皇冠淘宝店铺收入 编辑:程序博客网 时间:2024/06/06 03:43
List<Map>排序,按字符或数字类型排序,支持正序倒序,数字排序时处理空字符和非数字排序:空<非数字<数字
/** * 数字校验(正、负、小数) * @param s * @return */public static boolean isNumeric(String s) {if (s != null && !"".equals(s.trim()))return s.matches("^-?\\d+(\\.\\d+)?$");elsereturn false;}/** * List排序 * @param resultList Map数组 * @param orderColumn 排序列名 * @param isString 是否按字符串排序,否则按数字排序 * @param isAsc 是否正序 * @throws Exception */public static void listSort(List> resultList, final String orderColumn, final boolean isString,final boolean isAsc) throws Exception {// 返回的结果集Collections.sort(resultList, new Comparator>() {public int compare(Map o1, Map o2) {String s1 = StringUtils.getString(o1.get(orderColumn));String s2 = StringUtils.getString(o2.get(orderColumn));if (isString) {return s1.compareTo(s2) * (isAsc ? 1 : -1);} else {if (s1.equals(""))return isAsc ? -1 : 1;if (s2.equals(""))return isAsc ? 1 : -1;if (!isNumeric(s1) && !isNumeric(s2))return s1.compareTo(s2) * (isAsc ? 1 : -1);;if (!isNumeric(s1))return isAsc ? -1 : 1;if (!isNumeric(s2))return isAsc ? 1 : -1;return new BigDecimal(s1).compareTo(new BigDecimal(s2)) * (isAsc ? 1 : -1);}}});}public static void main(String[] args) throws Exception {List> list = new ArrayList>();Map map1 = new HashMap();Map map2 = new HashMap();Map map3 = new HashMap();Map map4 = new HashMap();Map map5 = new HashMap();map1.put("number", null);map2.put("number", "44a");map3.put("number", -3);map4.put("number", "36c");map5.put("number", 11.1234);list.add(map1);list.add(map2);list.add(map3);list.add(map4);list.add(map5);listSort(list, "number", false, false);System.out.println(list);}
阅读全文
0 0