实现Comparator的比较器

 

比较的对象类

 

class GroupInfo {
	public String groupID; // group id or room id

	private int rank; // the position of group after sort

	private double amount; // the amount of all devices in this room or group

	private String name; // room's name

	private int bitMapResoureceId;

	public GroupInfo(String gID, Amst amst) {
		groupID = gID;
		if (amst != null) {
			name = amst.getGmst_description();
		}
	}

	public double addAmount(Amst amst) {
		if (amst != null) {
			amount = amount + amst.getAmeas_value();
		}
		return amount;
	}

	public String getName() {
		return name;
	}

	public int getRank() {
		return rank;
	}

	public void setRank(int rank) {
		this.rank = rank;
	}

	public double getAmount() {
		return amount;
	}

	public int getBitMapResoureceId() {
		return bitMapResoureceId;
	}

	public void setBitMapResoureceId(int bitMapResoureceId) {
		this.bitMapResoureceId = bitMapResoureceId;
	}
}

 

排序的方法:

 public List<GroupInfo> sortGroupInfo(List<GroupInfo> gilist) {
        Collections.sort(gilist, new GIComparator(GIComparator.SORT_TYPE_AMOUNT));
        int size = gilist.size();
        if (size > MARK_DIGIT){ // if the list size greater than MARK_DIGIT 
            List<GroupInfo> gilist_h = (gilist.subList(0, MARK_DIGIT));
            List<GroupInfo> gilist_t= (gilist.subList(MARK_DIGIT, size));
            Collections.sort(gilist_t, new GIComparator(GIComparator.SORT_TYPE_GROUPID));
//            gilist.clear();  //此处不能将gilist 清空,sublist方法只是返回的视图,其实和父list使用的是同一块内存区域
            List<GroupInfo> result_list = new ArrayList<GroupInfo>();
            for (GroupInfo gi : gilist_h){
                result_list.add(gi);
            }
            for (GroupInfo gi : gilist_t){
                result_list.add(gi);
            }
            gilist = result_list ;
            
        }
        return gilist;

    }

 

 

实现Comparator接口的类

 

class GIComparator implements Comparator<GroupInfo> {
    public static final int SORT_TYPE_AMOUNT = 1 ; // sort by  GroupInfo.amount 
    public static final int SORT_TYPE_GROUPID = 2 ; // sort by  GroupInfo.groupID
 
    private int sort_type ; // the list sort type 
    public GIComparator(int type){
        sort_type = type ;
    }
    
    @Override
    public int compare(GroupInfo arg0, GroupInfo arg1) {
        double amount0 = arg0.getAmount();
        double amount1 = arg1.getAmount();

        String groupID0 = arg0.groupID;
        String groupID1 = arg1.groupID;

        int result = 0;
        
        switch (sort_type){
            default :
            case SORT_TYPE_AMOUNT : //sort by amount and group id
                double tmpd = amount0 - amount1;
                result = (tmpd != 0 ?(tmpd > 0 ? -1 : 1):groupID0.compareTo(groupID1) );      
                break ;
            case SORT_TYPE_GROUPID : // sort by group id
                result = groupID0.compareTo(groupID1);
                break ;

        }
        
        return result;
    }

 

 

 

你可能感兴趣的:(comparator)