有没有办法在 Kotlin 中将过滤器和映射合并为单个操作?

Ely*_*lye 10 kotlin

下面的代码将查找"="然后拆分它们。如果没有"=",先过滤掉

myPairStr.asSequence()
        .filter { it.contains("=") }
        .map { it.split("=") }
Run Code Online (Sandbox Code Playgroud)

然而看到我们两者都有

        .filter { it.contains("=") }
        .map { it.split("=") }
Run Code Online (Sandbox Code Playgroud)

想知道是否有一个单一的操作可以组合操作而不是单独执行?

Abh*_*wal 9

您可以使用mapNotNull代替map.

myPairStr.asSequence().mapNotNull { it.split("=").takeIf { it.size >= 2 } }
Run Code Online (Sandbox Code Playgroud)

如果方法返回的大小为1,即字符串中不存在,则该函数takeIf将返回。并且只接受值并将它们放入列表中(最终返回)。对于您的情况,此解决方案将会起作用。在其他场景中,实现(合并& )可能会有所不同。nulllistsplit=mapNotNullnon nullfiltermap