如何在Kotlin中调用可变列表中的行

a8jjtwal  于 2022-11-25  发布在  Kotlin
关注(0)|答案(1)|浏览(117)

我是一名大学生,正在尝试做一个学校的项目,但似乎遇到了一些障碍。我有一个文件夹,里面列出了我所做的不同类别的项目。我知道如何阅读这个文件:

class Inventory(var fileName: String) {
    override fun toString(): String {
        return """
            $fileName
        """.trimIndent()
    }
    init {
        val myList = mutableListOf<String>()
        File(fileName).useLines { lines -> myList.addAll(lines) }
        myList.forEachIndexed { i, line -> println("${i}: " + line) }

        if (lines[1] = --column1--){
           put line in a class object
        }
    }
}

我尝试使用Lines调用文本文件中的特定行,基本上就是说if(line[1] =“the first column”)do 'this',但是Lines不允许我这样做。我该如何使Lines工作呢?或者有没有更简单的方法先调用特定行,然后再调用列?
我们的目标是在文本中找到一个特定的行,然后把它放到一个特定的类对象中,我知道怎么把它放到一个类对象中,我只是想调用这个特定的行。
谢谢你的帮助!

zzoitvuj

zzoitvuj1#

我希望我正确地理解了这个问题...您可以将代码简化为:

class Inventory(private val fileName: String) {

    private val lines: List<String> = File(fileName)
        .readLines()
        .filter { it ==  "the first column" }
        .toList()

    override fun toString() = fileName
}

请注意,这段代码效率很低,因为您只读取了整个文件的第一行,这个想法只是给予您一个如何操作它的示例。
此外,您不需要使用字符串格式来返回文件名,因此我对您的toString方法进行了一些简化
最后但并非最不重要的一点是,请记住lines是一个变量,它是在类的构造函数中的匿名函数中定义的,因此一旦函数完成就不可用。为了解决这个问题,我定义了类成员lines,并在创建类时初始化它。
最后但并非最不重要的是,我从可变列表切换到不可变列表,因为它更安全,而且在这里您实际上不需要改变列表:)

相关问题