我不结果分页经常(给出页码和页面大小来计算起点,终点和总页数)和我移植从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, to, totalPages) = page(page, pageSize, totalItems)
虽然它的作品,我敢肯定有更好的可读性和功能的方式做同样的事情在斯卡拉。什么会是更类似scala的方法?
特别是,我试图找到他说的更好的方式:
var to = from + pageSize - 1
if (to > totalItems) to = totalItems
在Java中,我可以这样做:
from + pageSize - 1 + (to > totalItems) ? 1 : 0;
谢谢雷克斯。我同意函数名称的改变。我只是快速把东西扔在一起,以确保它编译。 我认为'min'是一个明显的改进,'if'解决了var的使用。如果有什么更简洁的东西会更好? :在Java中。 – Ike 2010-12-16 22:07:51
@IKE - 没有内置三元运算符,但可以很容易地定义自己的三元运算符。例如,请参阅http://stackoverflow.com/questions/2705920 – 2010-12-17 02:47:09
我明白了。非常有趣的帖子。对于“相对较少”的收益,它似乎是一个过于复杂的解决方案(甚至不考虑评论中提出的性能影响)。我认为你上面提出的修改达到了正确的平衡。再次感谢。 – Ike 2010-12-17 04:18:31