·
需求目标:
- 查看排名。
- 查看本次记录的排名。
实现方式:
(1查看排名)
- 先从数据库中获取一定条件一定范围内的所有数据。获取的数据一般是以一条记录为一个元素的数组。接下来就是对这个数组的操作。
- 对该数组聚类(groupBy)。
- 把聚类展开按一定顺序排序后获取该聚类里的第一个元素,然后形成一个新的数组。(这里就实现了去重,并且按需求或者需要的一个元素,同时还是通过该聚类的长度获取这个聚类的元素个数。)例如: (groupBy(_.peid).map(_._2).map(i => (i.sortBy(j =>(-j.anRight, j.anLong)).head)))
- 根据上一步操作这里已经获取去重过的数组。再进行一个排序,通过序号的方式可以知道每一个元素的位置。即排名。例如: (resList.zipWithIndex.filter(_._1.peid == peid).head)
- 注意点:
- 对需要多个数字元素降排序时,只需在元素面前增加 “-”号。
- 增加的需要是从零开始,所以正常的排名需要+1。
(2.查看本次记录的排名)
- 查看本次记录的排名在于抽取的数据中需要事先剔除掉本人的记录,确保排名只是本次记录的排名。所以对数组的处理中需要加入剔除条件。例如:(res.toList.filter(_.peid != peid))
- 后面其他操作和上面类似,聚合选优,即去除多余或者重复的。
- 之后本次记录当做一个元素添加到去重得到的数组中,形成一个新的数组。例如:( groupQuery.toList ++ List(red),或 groupQuery.toList :+ red )
- 对这个数组排序,后增加序号,与上面同理可得该序号+1就是本次记录的排名。