代码之家  ›  专栏  ›  技术社区  ›  Mario Burga

根据过滤器将数组一分为二

  •  1
  • Mario Burga  · 技术社区  · 6 年前

    我卖书的应用程序,当用户买了一本书,一个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]
    

    然后在回收视图中按部分显示:

    ________________
    MY SS BOOK
    ________________
    ssbook1
    ----------------
    ssbook2
    ----------------
    ssbook3
    ________________
    MY AABOOK
    ________________
    aabook1
    ----------------
    aabook2
    

    任何建议我都将不胜感激。

    2 回复  |  直到 5 年前
        1
  •  4
  •   Dinesh Balasubramanian    6 年前

    希望下面的代码有帮助。

    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]]
    

    可以使用结果二维数组在回收器视图中显示节

        2
  •  2
  •   user8320224    6 年前

    你可以玩得开心 partition

    第一 true ,*同时 第二 列表包含[predicate]生成的元素 false . */