全屏浏览
缩小浏览
回到页首

java基础---->多个排序的拓展

  根据一些特定的规则,我们可以利用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);
}
View Code

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);
}

 

友情链接

 

posted @ 2017-02-24 18:26  huhx  阅读(264)  评论(0编辑  收藏  举报