加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在Scala中进行结果分页的更好方法

发布时间:2020-12-16 09:52:18 所属栏目:安全 来源:网络整理
导读:我经常进行分页(给定页码和页面大小计算开始页,结束页和总页数),我从 Java移植这个小函数来帮助: def page(page: Int,pageSize: Int,totalItems: Int) = { val from = ((page - 1) * pageSize) + 1 var to = from + pageSize - 1 if (to totalItems) to = t
我经常进行分页(给定页码和页面大小计算开始页,结束页和总页数),我从 Java移植这个小函数来帮助:

def page(page: Int,pageSize: Int,totalItems: Int) = {
    val from = ((page - 1) * pageSize) + 1
    var to = from + pageSize - 1
    if (to > totalItems) to = totalItems
    var totalPages: Int = totalItems / pageSize
    if (totalItems % pageSize > 0) totalPages += 1
    (from,to,totalPages)
}

并在接收方:

val (from,totalPages) = page(page,pageSize,totalItems)

虽然它有效,但我确信在Scala中有更多可读性和功能性的方法来做同样的事情.什么是更像scala的方法?

特别是,我正试图找到一种更好的说法:

var to = from + pageSize - 1
if (to > totalItems) to = totalItems

在Java中我可以做类似的事情:

from + pageSize - 1 + (to > totalItems) ? 1 : 0;

解决方法

最简单的改进就是使用函数而不是vars(并避免使用参数名称隐藏方法名称,因此无论是否调用递归函数都更清楚):

def pageCalc(page: Int,totalItems: Int) = {
  val from = ((page - 1) * pageSize) + 1
  val to = totalItems min (from + pageSize - 1)
  val totalPages = (totalItems / pageSize) + (if (totalItems % pageSize > 0) 1 else 0)
  (from,totalPages)
}

关键的变化只是使用min函数而不是单独的var,并让if语句返回0或1,而不是让它更新var.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读