根据一些特定的规则,我们可以利用java的反射机制做到很有趣的封装。
java的排序封装
一、定义一些comparator
AmountComparatorAsc:amount升序
package com.huhx.example; import java.util.Comparator; import java.util.Map; @SuppressWarnings("rawtypes") public class AmountComparatorAsc implements Comparator<Map> { @Override public int compare(Map map1, Map map2) { Integer amount1 = (Integer) map1.get("amount"); Integer amount2 = (Integer) map2.get("amount"); return amount2 - amount1; } }
AmountComparatorDesc:amount降序
package com.huhx.example; import java.util.Comparator; import java.util.Map; @SuppressWarnings("rawtypes") public class AmountComparatorDesc implements Comparator<Map> { @Override public int compare(Map map1, Map map2) { Integer amount1 = (Integer) map1.get("amount"); Integer amount2 = (Integer) map2.get("amount"); return amount1 - amount2; } }
RateComparatorAsc: 利率升序
package com.huhx.example; import java.util.Comparator; import java.util.Map; @SuppressWarnings("rawtypes") public class RateComparatorAsc implements Comparator<Map> { @Override public int compare(Map map1, Map map2) { int flag = 0; String rateStr1 = (String) map1.get("lilv"); String rateStr2 = (String) map2.get("lilv"); float rateSub = Float.valueOf(rateStr1.replace("%", "")) - Float.valueOf(rateStr2.replace("%", "")); if (rateSub > 0) { flag = 1; } else if(rateSub < 0) { flag = -1; } else { flag = 0; } return flag; } }
RateComparatorDesc:利率降序
package com.huhx.example; import java.util.Comparator; import java.util.Map; @SuppressWarnings("rawtypes") public class RateComparatorDesc implements Comparator<Map> { @Override public int compare(Map map1, Map map2) { int flag = 0; String rateStr1 = (String) map1.get("lilv"); String rateStr2 = (String) map2.get("lilv"); float rateSub = Float.valueOf(rateStr2.replace("%", "")) - Float.valueOf(rateStr1.replace("%", "")); if (rateSub > 0) { flag = 1; } else if (rateSub < 0) { flag = -1; } else { flag = 0; } return flag; } }
二、定义排序的工具类:SequenceUtils的sort方法
package com.huhx.example; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Map; /** * @author huhx */ public class SequenceUtils { public final static String COMPARATOR_NAME = "Comparator"; public final static String ASC_ORDER = "Asc"; public final static String DESC_ORDER = "Desc"; public final static String PACKAGE_PATH = "com.huhx.example" ; @SuppressWarnings({ "unchecked", "rawtypes" }) public static void sort(String order, String data, List list) { String classStrName = comparatorName(order, data); try { Comparator<Map> comparator = (Comparator<Map>)Class.forName(PACKAGE_PATH + "." +classStrName).newInstance(); Collections.sort(list, comparator); } catch (Exception e) { e.printStackTrace(); } } // 0 stands for asc, 1 stands for desc public static String comparatorName(String order, String data) { String dataName = changeFirstUpper(data); String oderName = ""; if (order.equals("0")) { oderName = ASC_ORDER; } else if (order.equals("1")) { oderName = DESC_ORDER; } return dataName + COMPARATOR_NAME + oderName; } private static String changeFirstUpper(String data) { String str = data.substring(0, 1); return str.toUpperCase() + data.substring(1, data.length()); } }
三、我们的测试类以及测试数据:sequence
测试的数据:

private static void initData(List<Map> data) { Map map = new HashMap(); map.put("lilv", "10%"); map.put("amount", 2000); data.add(map); map = new HashMap(); map.put("lilv", "60%"); map.put("amount", 7000); data.add(map); map = new HashMap(); map.put("lilv", "80%"); map.put("amount", 5000); data.add(map); map = new HashMap(); map.put("lilv", "20%"); map.put("amount", 3000); data.add(map); map = new HashMap(); map.put("lilv", "50%"); map.put("amount", 6000); data.add(map); map = new HashMap(); map.put("lilv", "90%"); map.put("amount", 1000); data.add(map); map = new HashMap(); map.put("lilv", "30%"); map.put("amount", 8000); data.add(map); map = new HashMap(); map.put("lilv", "70%"); map.put("amount", 4000); data.add(map); map = new HashMap(); map.put("lilv", "40%"); map.put("amount", 10000); data.add(map); map = new HashMap(); map.put("lilv", "100%"); map.put("amount", 9000); data.add(map); }
main类的代码如下:
public static void main(String[] args) { List<Map> data = new ArrayList<Map>(); initData(data); System.out.println(data); SequenceUtils.sort("1", "rate", data); System.out.println(data); }