专栏首页麦洛的历劫之路一个排名调整问题恶心了我整整一天

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

Hello,大家好,我是麦洛,最近在项目中遇到一个排名调整问题,一番折腾,算是搞定了,分享出来我的方法和大家交流,希望找到更优解

  • 问题回顾
  • 问题分析
    • ?场景一
    • ?场景二
  • 解决方案

?由于笔者水平有限,文章难免有不当之处,恳请读者不吝赐教并提出意见 目前公众号没有留言功能,如何找到我??大家可以关注我的公众号:今日Java, 后台回复"加群"就可以获取到我的个人微信,同时也可以拉大家进交流群一起交流学习✌

问题回顾

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

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

问题分析

?场景一

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

?场景二

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

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

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

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

解决方案

        HashMap<String, Object> params = new HashMap<>();
        params.put("projectId", bidder.getProjectId());
        params.put("sectionId", bidder.getSectionId());

        LinkedList<Integer> temp = new LinkedList<>();
        //查询当前所有投标人排名
        LinkedList<Bidder> ranks = this.selectBidderRanking(bidder);

       //将所有企业旧排名先放入链表中
        ranks.forEach(i -> {
            temp.add(i.getBidderId());
        });
        //移除当前元素[就是跳转排名的那个企业]
        temp.remove(bidder.getBidderId());
        //指定位置插入元素[以新排名为位置,重新插入那个企业]
        temp.add(Integer.parseInt(bidder.getRank()) - 1, bidder.getBidderId());

        //更新排名

        for (int i = 0; i < temp.size(); i++) {
            bidder.setBidderId(temp.get(i));
            bidder.setRank(String.valueOf(i + 1));
            bidderMapper.updateBidderRank(bidder);
        }

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

今天的分享就到这里,我是麦洛,那个连HashMap源码都没看完的家伙,如果大家更好的方法,记得给我留言

谢谢大家的阅读,如果有什么疑问或者建议,可以点击下方留言板,给我留言!

本文分享自微信公众号 - 今日Java(JavaToday),作者:麦洛

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-04-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 我花一个月时间整理了新人转行IT最爱问都问题

    我不能一一全部解答,我收集了比较有代表性都问题,如果你也是准备转行程序员的人,相信你也会纠结同样的问题。

    王炸
  • 学会了爬虫,然后我一不小心就统治了整个Python吧

    用户1682544
  • 什么是负面SEO 如何处理负面SEO?

    整个SEO行业在过去两年中经历了重大转变。因此,许多网站推广员已经大大改变了他们的策略,在竞争激烈的SEO行业中,试图让网站排名前三,貌似并不向早期SEO,那么...

    蝙蝠侠IT
  • 百度近期算法调整,“未能抓取成功”不收录怎么办?

    毫无疑问,自熊掌号上线以来,百度算法我们几乎认为每天都在调整,从“号”变“ID”虽然,战略层面的因素更多,但相关的搜索权益也在悄然变更。 

    蝙蝠侠IT
  • 没救了的百度 没品的公司

    如果你要问我最不值得尊重的互联网公司有哪些?我首推百度,当Google在研究VR的时候,他在研究如何竞价收钱,当Google在研究无人汽车的时候,他在研究如何助...

    人称T客
  • 我用ABAP做过的那些无聊的事情

    SAP社区上有一位网友Sinai可能觉得我是吃饱了撑着没事干(这倒是事实),毕竟在ABAP里要排序直接使用关键字SORT即可。

    Jerry Wang
  • 幽默的程序员

    程序你好
  • 我用ABAP做过的那些无聊的事情

    Jerry的成都同事李贝宁(Li Ben), 《SAP成都研究院李三郎:SCP Application Router简介》的作者,有一次11月份的时候和Jerr...

    Jerry Wang
  • EOS超级节点选举竟被恶意操控?那21个节点的背后踩着多少森森白骨

    英语中有一个谚语,叫「房间里的大象」(elephant in the room),用来形容一个明明存在的问题,却被人刻意的回避及无视的情形。

    区块链大本营

扫码关注云+社区

领取腾讯云代金券