【发布时间】:2022-01-11 16:42:18
【问题描述】:
我正在开发具有此 DAO 查询的字典应用程序,该查询从数据库中返回 20 个项目。查询工作正常。
@Query("SELECT word, meanings FROM wordentity GROUP BY word ORDER BY id DESC LIMIT 20")
suspend fun getLastTenWords(): List<Words>
在 ViewModel 中,我将数据库中的单词列表传递给辅助方法以整理列表,即删除重复项、删除大写字母并仅返回前 10 个已清理的项目。
private fun cleanLastTenWords(words: List<Word>): List<String> {
val list = mutableListOf<String>()
for (word in words) {
list.add(word.word.lowercase())
}
return list.distinct()
.dropLast(10)}
数据库从零项开始,但是当用户搜索字典时,该词被插入到数据库中。
问题在于最初会返回一个空列表,直到插入 11 个项目。在第 11 项,返回 1 个单词项的列表。在第 12 项,数据库返回 2 个单词项的列表,依此类推。
问题是由dropLast() 调用引起的。这是因为当我注释掉 dropLast(10) 时,代码运行良好,但返回 超过 10 个 个单词项。
我需要的只是前 10 个单词项目的列表 - 例如,如果数据库有 3 个项目,它应该只返回 3 个项目而不是返回一个空列表。如果列表有 15 个项目,我只需要前 10 个项目并丢弃第 10 个项目之后的任何其他项目。
我哪里出错了?
【问题讨论】:
-
我想你想写
return list.distinct().take(10)以便保留前 10 个元素。这不是你想要达到的目标吗? -
take(10)工作正常,非常感谢@F.Mysir,你是个传奇!