Я часто выполняю разбиение по страницам (учитывая номер страницы и размер страницы, рассчитываю начало, конец и общее количество страниц) и портировал эту небольшую функцию из 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;