在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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |