如果我不在乎,我会做一个"第一次"在lineSequence上,如果它存在,重新运行正则表达式。
val possibleMatch = input.lineSequence().first { myRegex.matches(it) }
...但我想成为kotlin-cool而不必重新运行正则表达式。我应该使用映射到MatchGroup并过滤掉空值吗?感觉比它更加冗长......
input.lineSequence()
.mapNotNull { myRegex.find(it) }
.map { it.groupValues[1] }
.first()
答案 0 :(得分:3)
您可以将其简化为单.mapNotNull { ... }
:
input.lineSequence()
.mapNotNull { regex.find(it)?.groupValues?.get(1) }
.first()
如果.find(it)
返回null
,则该值仍会从序列中删除,否则将在同一个调用中处理。