政府系统中机构岗位人员复杂排序算法

给定的一组成员(机构、人员(带岗位))
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);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值