如何在Kotlin中使用Lamba表达式使Java方法调用更简洁?

Zak*_*rdi 4 java lambda kotlin

使用Lambda表达式,以下函数可以更简洁吗?我怎样才能减少它?它正在调用FilenameFilter.accept()Java方法.

val files = File(SECTIONS_DIR).listFiles(object : FilenameFilter {
            override fun accept(dir: File?, filename: String): Boolean {
                if (filename.matches(regex))
                    return true
                else
                    return false
            }
        })
Run Code Online (Sandbox Code Playgroud)

Dav*_*rad 12

我不确定Kotlin语法,但你可以通过直接返回布尔表达式来减少它,从而消除if:

val files = File(SECTIONS_DIR).listFiles(object : FilenameFilter {
            override fun accept(dir: File?, filename: String): Boolean {
                return filename.matches(regex)
            }
        })
Run Code Online (Sandbox Code Playgroud)

我相信Kotlin lambda语法看起来像这样:

val files = File(SECTIONS_DIR).listFiles { dir, filename -> filename.matches(regex) }
Run Code Online (Sandbox Code Playgroud)

编辑:根据Sergey Mashkov的反馈删除不必要的括号.谢谢!


Jay*_*ard 6

澄清最短的形式:

val files = File(SECTIONS_DIR).listFiles { dir, filename -> filename.matches(regex) }
Run Code Online (Sandbox Code Playgroud)