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

Ike*_*Ike 4 paging pagination scala

我经常进行分页(给定页码和页面大小计算开始页,结束页和总页数),我从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)
}
Run Code Online (Sandbox Code Playgroud)

并在接收方:

val (from, to, totalPages) = page(page, pageSize, totalItems)
Run Code Online (Sandbox Code Playgroud)

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

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

var to = from + pageSize - 1
if (to > totalItems) to = totalItems
Run Code Online (Sandbox Code Playgroud)

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

from + pageSize - 1 + (to > totalItems) ? 1 : 0;
Run Code Online (Sandbox Code Playgroud)

Dan*_*ral 8

问题的一半是确定模式:

def pageCalc(page: Int, pageSize: Int, totalItems: Int) = {
    val pages = 1 to totalItems by pageSize
    val from = pages(page - 1)
    val to = from + pageSize - 1 min totalItems
    val totalPages = pages.size
    (from, to, totalPages)
}
Run Code Online (Sandbox Code Playgroud)

虽然,真的,也许你可以直接使用Range