我不結果分頁經常(給出頁碼和頁面大小來計算起點,終點和總頁數)和我移植從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