gpt4 book ai didi

kotlin - 如何仅映射序列中的某些项目而忽略其他项目

转载 作者:行者123 更新时间:2023-12-02 13:20:26 24 4
gpt4 key购买 nike

我正在开发一种工具,可以帮助我浏览日志文件并决定同时学习Kotlin。 (我是该语言的新手,所以如果这个问题显而易见,我深表歉意。)现在,我想读取一个日志文件并将每一行与几个正则表达式进行比较。根据要匹配的颜色,我想使用其他颜色。我将这些返回到UI列表中以处理显示

这是我在当前代码中看到的问题:

  • 每行都要对正则表达式进行两次检查。我想避免这种不必要的性能下降,因为这最终将处理非常大的日志文件
  • 我需要在else语句中返回一些内容,以保持我的类型List<LineAndStyle>而不是成为List<Any>
  • fun process(file: File): List<LineAndStyle> {
    val result = file.useLines {
    it.filter { line ->
    exceptionsPattern.containsMatchIn(line) ||
    networkPattern.containsMatchIn(line) ||
    dataPattern.containsMatchIn(line)
    }.map { line ->
    when {
    exceptionsPattern.containsMatchIn(line) -> LineAndStyle(line, Color.PINK)
    networkPattern.containsMatchIn(line) -> LineAndStyle(line, Color.LIGHTBLUE)
    dataPattern.containsMatchIn(line) -> LineAndStyle(line, Color.LIGHTGREEN)
    else -> {
    LineAndStyle(line, Color.BLACK)
    }
    }
    }.toList()
    }
    return result
    }

    请帮助我了解Kotlin中惯用的方式。

    最佳答案

    这个怎么样?

    fun process(file: File): List<LineAndStyle> =
    file.useLines { lines ->
    lines.mapNotNull { line ->
    when {
    exceptionsPattern.containsMatchIn(line) -> LineAndStyle(line, Color.PINK)
    networkPattern.containsMatchIn(line) -> LineAndStyle(line, Color.LIGHTBLUE)
    dataPattern.containsMatchIn(line) -> LineAndStyle(line, Color.LIGHTGREEN)
    else -> null
    }
    }.toList()
    }

    关于kotlin - 如何仅映射序列中的某些项目而忽略其他项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57795159/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com