我的销售书籍的应用程序,当用户购买书籍时,会将pdf文件下载到手机的内存中。我有两类书,并且pdf文件的名称中有一个用于识别它的代码。
在所有已购买并因此下载的文件中,我具有以下代码来获取所有已购买书籍的数组:
val purchasedBooks: ArrayList<String> = ArrayList()
val directoryFiles = context?.filesDir
val files = directoryFiles?.listFiles()
if (files != null) {
for (aFile in files) {
purchasedBooks.add(aFile.name)
}
}
此代码在purchasedBooks
中返回我:
[ssbook1.pdf, ssbook2.pdf, ssbook3.pdf, aabook1.pdf, aabook2.pdf]
我需要这样:
val ssbooks = [ssbook1, ssbook2, ssbook3] // without .pdf
val aabooks = [aabook1, aabook2]
然后按部分在recyclerView中显示它:
________________
MY SS BOOK
________________
ssbook1
----------------
ssbook2
----------------
ssbook3
________________
MY AABOOK
________________
aabook1
----------------
aabook2
任何建议,我将不胜感激。
答案 0 :(得分:4)
希望以下代码帮助。
val arr = listOf("ssbook1.pdf", "ssbook2.pdf", "ssbook3.pdf", "aabook1.pdf", "aabook2.pdf")
val result = arr.map {it.substringBefore(".pdf")}
.groupBy {it.contains("ssbook")}
.map { it.value}
println(result) // [[ssbook1, ssbook2, ssbook3], [aabook1, aabook2]]
您可以使用结果2D数组在回收站视图中显示部分
答案 1 :(得分:2)
您可以使用有趣的partition
/ ** *将原始数组拆分为列表对,*其中 first 列表包含[谓词]产生
true
,*的元素 second 列表包含[谓词]产生false
的元素。 * /