一个排名调整问题恶心了我整整一天

开发 后端
在招投标行业,某个项目的某个标段会有多家投标人来投标.为了选出中标企业,会组织专家对投标人进行评审,在最后阶段,如果有特殊原因允许对投标人排名进行临时调整。今天就带大家一起学习相关内容!

[[390816]]

 问题回顾


在招投标行业,某个项目的某个标段会有多家投标人来投标.为了选出中标企业,会组织专家对投标人进行评审,在最后阶段,如果有特殊原因允许对投标人排名进行临时调整

如上图所示,我们可以点击排名按钮,在弹框中选择期望的排名,对投标人排名进行调整;

问题分析

🙌场景一

假如我们将第一名调整为第二名,那么第二名和第一名要对调位置,第三名保持不变,最终变为右侧顺序

🙌场景二

假如我们把第三名调整为第一名,那么原来的第一名和第二名的排名要递减1,最终变为右侧顺序

🤦‍♀️以我浅薄的知识,感觉这个问题很棘手

刚开始我想我需要先把原来的排名查询出来,然后分上面两种情况去判断,进而获取各个元素的新排名,在建立旧排名和新排名的关联,然后通过这个关联关系达到更新数据库的目的

虽然这样也可以做,但我最近放弃了这种方式,采用引入链表来实现,下面来一起看看

解决方案

  1.  HashMap<String, Object> params = new HashMap<>(); 
  2.  params.put("projectId", bidder.getProjectId()); 
  3.  params.put("sectionId", bidder.getSectionId()); 
  4.  
  5.  LinkedList<Integertemp = new LinkedList<>(); 
  6.  //查询当前所有投标人排名 
  7.  LinkedList<Bidder> ranks = this.selectBidderRanking(bidder); 
  8.  
  9. //将所有企业旧排名先放入链表中 
  10.  ranks.forEach(i -> { 
  11.      temp.add(i.getBidderId()); 
  12.  }); 
  13.  //移除当前元素[就是跳转排名的那个企业] 
  14.  temp.remove(bidder.getBidderId()); 
  15.  //指定位置插入元素[以新排名为位置,重新插入那个企业] 
  16.  temp.add(Integer.parseInt(bidder.getRank()) - 1, bidder.getBidderId()); 
  17.  
  18.  //更新排名 
  19.  
  20.  for (int i = 0; i < temp.size(); i++) { 
  21.      bidder.setBidderId(temp.get(i)); 
  22.      bidder.setRank(String.valueOf(i + 1)); 
  23.      bidderMapper.updateBidderRank(bidder); 
  24.  } 

在我们刚刚分析的过程中,其实最麻烦的地方就是一个企业排名变化以后,其他的都要跟着变化,通过利用链表,我们只需要关注他的新排名,对应其他元素的升降已经由链表帮我们处理好,我们只需要重新遍历,就可以获取到新的排名。

 

责任编辑:姜华 来源: 今日Java
相关推荐

2021-04-29 08:05:50

APP套路央视赚钱

2019-11-07 15:30:00

EmacsIDE

2022-05-31 08:35:05

RocketMQACK客户端

2017-03-21 21:17:50

大数据数据互联网

2018-12-09 14:55:07

区块链加密货币比特币

2021-07-15 09:49:08

B站宕机黑客

2015-06-17 14:25:04

2013-01-08 13:32:31

SEO GTD

2020-11-04 07:56:19

工具Linux 翻译

2020-11-20 08:01:37

程序员产品经理转型

2011-05-23 18:32:46

SEO

2022-05-16 08:42:26

Pandasbug

2021-09-13 08:41:52

职场互联网自闭

2020-09-27 14:13:50

Spring BootJava框架

2020-05-08 13:52:53

5G2025年工程师

2015-10-29 11:36:45

Google技术经理程序员

2009-06-16 12:53:06

2020-04-03 09:45:09

Java多线程接口

2021-09-09 06:18:04

交互功能弹幕

2018-10-22 17:52:28

GitHub代码开发者
点赞
收藏

51CTO技术栈公众号