给定的一组成员(机构、人员(带岗位))
1 基础排序的实现: 机构 部门 岗位 用户实体都要实现Comparator接口
2 排序算法 要排序的类实现compareable 接口
public class AgOpusGroupMemberComparable implements Comparator{
public int compare(Object o1,Object o2) {
if(! o1 instanceof AgOpusGroupMember || !o2 instanceof AgOpusGroupMember)
throw new Exception("对象类型错误,必须都为AgOpusGroupMember");
AgOpusGroupMember m1=(AgOpusGroupMember)o1;
AgOpusGroupMember m2=(AgOpusGroupMember)o2;
//具体排序算法
//先取得两个成员在领导班子和成员中的排序
Long cityLeaderOrder1 = getCityLeaderOrder(m1);
Long cityLeaderOrder2 = getCityLeaderOrder(m2);
if(cityLeaderOrder1 != null && cityLeaderOrder2 != null)
return cityLeaderOrder1.compareTo(cityLeaderOrder2);
if(cityLeaderOrder1 != null && cityLeaderOrder2 == null)
return 1;
if(cityLeaderOrder1 == null && cityLeaderOrder2 != null)
return 0;
//如果都不是领导班子中的人
if(cityLeaderOrder1 == null && cityLeaderOrder2 == null){
//再看机构
AgOpusOrgForm org1 = getOrg(m1);
AgOpusOrgForm org2 = getOrg(m2);
//取得类型
Long memberType1 = getType(m1);
Long memberType2 = getType(m2);
//先按机构排序
if(org1 != org2 )
return org1.compareTo(org2);
else{
//如果是同一个机构
if(memberType1 == 1 && memberType1 ==2) {
return 1; //机构排在前
}else{
//看该人员是否为机构内重要人员
Long importPersonNo1 = getImportPersonNo(m1);
Long importPersonNO2 = getImportPersonNo(m2);
if(importPersonNo1 != null && importPersonNo2 != null)
return importPersonNo1.compareTo(importPersonNo2);
if(importPersonNo1 == null && importPersonNo2 != null)
return -1;
if(importPersonNo1 != null && importPersonNo2 == null)
return 1;
//如果都不是机构内重要人员 看部门顺序
if(importPersonNo1 == null && importPersonNo2 == null){
AgOpusDepartMent dept1= getDept(m1);
AgOpusDepartMent dept2= getDept(m2);
if(dept1 != dept2 )
return dept.compareTo(dept2);
//如果部门相同 则比较部门内的岗位顺序
AgOpusPosition pos1= getPos(m1);
AgOpusPosition pos2= getPos(m2);
return pos1.compareTo(pos2);
}
}
}
}
}
3 调用 Collections.sort();
Collections.sort(List<AgOpusGroupMember>,AgOpusGroupMemberComparable);