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

本文详细介绍了如何使用排序算法对成员组织进行基础排序,包括机构、人员岗位的比较和排序逻辑,以及如何通过Collections.sort()方法实现排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值