Android上的Kotlin:将光标映射到列表

在Kotlin中,遍历Android Cursor对象并将结果放入列表中的最佳方法是什么?

我的自动转换的Java:

val list = ArrayList() while (c.moveToNext()) { list.add(getStringFromCursor(c)) } 

有没有更习惯的方式? 特别是,它可以在只读列表中进行一次分配吗? 例如…

 val list = /*mystery*/.map(getStringFromCursor) 

…或其他安排,其中列表分配完整。

这是我最后用的,使用kotlin.sequences.generateSequence

 val list = generateSequence { if (c.moveToNext()) c else null } .map { getStringFromCursor(it) } .toList() 

我的第一次尝试是短一点:

 val list = (1 .. c.count).map { c.moveToNext() getStringFromCursor(c) } 

两个版本都依赖于最初放置在第一个记录之前的游标。 如果不是这样,第二个会抛出,而第一个会返回一个较短的列表。

Cursor是懒惰的,所以没有明显的map 。 然而Anko(JetBrains的ANdroid KOtlin)确实有一个扩展方法来帮助你绘制Cursor

该方法被称为Cursor.parseList(parser) 。 在这里你可以find它的完整实现。 用法应该是直截了当的。 这里有一些关于sqlite的官方文档和用anko解析游标。

你的第一个建议是正确的。 你不能映射游标。