List<Map<String, Object>>集合,根据指定元素进行排序
集合的排序,对于不能使用默认的排序方法的,需重写Comparator的compare方法。
特殊处理的场景
-
根据某个中文元素进行排序
由于中文是Unicode编码,不能使用默认的排序方法,需重写Comparator的compare方法。
list.stream().sorted((o1, o2) -> { Collator collator = Collator.getInstance(Locale.CHINA); return collator.compare(String.valueOf(o1.get("")), String.valueOf(o2.get(""))); }).collect(Collectors.toList())
-
根据金额元素排序
Collections.sort(resultList, new Comparator<Map<String, String>>() { @Override public int compare(Map<String, String> o1, Map<String, String> o2) { return new BigDecimal(StringUtil.valueOf(o1.get("sortVal"))) .compareTo(new BigDecimal(StringUtil.valueOf(o2.get("sortVal")))); } });
处理普通数值及字符串的排序
-
公共方法
/** * 对结果集list进行排序 * * @param key 排序的字段 * @param flag 升序或降序 * @param res 结果集 */ private static void resOrder(final String key, final String flag, List<Map<String, Object>> res) { res.sort((o1, o2) -> { int index; //降序 if (flag.equals("desc")) { if (o1.get(key) instanceof Double) { index = Double.compare(Double.parseDouble(MapUtils.getString(o2, key)), Double.parseDouble(MapUtils.getString(o1, key))); } else { index = MapUtils.getString(o2, key).compareTo(MapUtils.getString(o1, key)); } } //升序 else { if (o1.get(key) instanceof Double) { index = Double.compare(Double.parseDouble(MapUtils.getString(o1, key)), Double.parseDouble(MapUtils.getString(o2, key))); } else { index = MapUtils.getString(o1, key).compareTo(MapUtils.getString(o2, key)); } } return index; }); }