对无顺序的map进行排序(升序)以及随机数

/**    
  * @Title: sort @Description: 类型任务数量是否没有达到上限的适用用户,从小到大排序 @param @param   
  *         Map<UserEntity, Long> oldMap @param @return @return String   
  *         userId @throws   
  */   
 public String sortMap(Map<String, Long> oldMap) {   
  // 对无顺序的map进行排序  
  ArrayList<Map.Entry<String, Long>> list = new ArrayList<Map.Entry<String, Long>>(oldMap.entrySet());  
    
  Collections.sort(list, new Comparator<Map.Entry<String, Long>>() {  
   @Override 
   public int compare(Entry<String, Long> arg0, Entry<String, Long> arg1) { 
    return (int) (arg0.getValue() - arg1.getValue());
   } 
  });  
  // 对有序数组进行判断,该类型任务最少的用户为多人的场合,随机分配  
  long lastUserTaskCount = 0;  
  String theSuitableUserId = "";  
  List<String> listSuitableUser = new ArrayList<String>();  
  for (int m = 0; m < list.size(); m++) {  
   long nowUserTaskCount = list.get(m).getValue(); 
   if (m == 0 || lastUserTaskCount == nowUserTaskCount) 
    listSuitableUser.add(list.get(m).getKey());
   else 
    break;
   lastUserTaskCount = list.get(m).getValue(); 
  }  
    
  if (listSuitableUser.size() == 1)  
   theSuitableUserId = listSuitableUser.get(0); 
  else {  
   Random rand = new Random(); 
   int k = rand.nextInt(listSuitableUser.size()); 
   theSuitableUserId = listSuitableUser.get(k); 
  }  
    
  return theSuitableUserId;  
 }   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学编程的司马光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值