java实现按对象某个字段排序,排序字段和规则自定义
@SuppressWarnings({ "unchecked", "rawtypes" }) private <T> void sort(List<T> targetList, final String sortField, final String sortMode) { Collections.sort(targetList, new Comparator() { //匿名内部类,重写compare方法 @Override public int compare(Object obj1, Object obj2) { Class c = obj1.getClass(); Integer result = 0; try { Field field = c.getDeclaredField(sortField); String classType = field.getType().getSimpleName(); Method method = null; if (BIGDECIMAL.equals(classType)) { method = c.getMethod("get" + sortField.substring(0, 1).toUpperCase() + sortField.substring(1), new Class[]{}); if (BizConstants.DESC.equalsIgnoreCase(sortMode)) { result = ((BigDecimal) method.invoke(obj2)).compareTo((BigDecimal) method.invoke(obj1)); } else if (BizConstants.DESC.equalsIgnoreCase(sortMode)) { result = ((BigDecimal) method.invoke(obj1)).compareTo((BigDecimal) method.invoke(obj2)); } } else { result = -100; throw new RuntimeException("暂不支持其它类型字段排序,如有需要请自己添加."); } } catch (Exception e) { e.printStackTrace(); } return result > 0 ? 1 : result < 0 ? -1 : 0; } }); }