当我处理Mono和Flux时如何避免在Kotlin中使用非null断言(!!)

时间:2019-12-06 15:34:50

标签: kotlin spring-webflux

我该如何删除!运算符,当我有以下代码时?

val flux = Flux.just(Foo("Big"), Foo(null), Foo("Small"))
flux.filter { it.name != null }
    .map { functionThatRequiresAString(it.name!!) }


fun functionThatRequiresAString(name: String){
 // map
}

3 个答案:

答案 0 :(得分:2)

有一个方便的message = (10311132-10710510810832-121111117114115101108102)函数,您可以将其与安全调用运算符mapNotNull结合使用以提供:

?

这将提供所需的BIG,SMALL输出

答案 1 :(得分:0)

Kotlin提供了许多可爱的方法来处理可为空的值。我想到的一个是let

flux
  .filter { it.name != null }
  .map {it?.let { it1 -> it1.toUpperCase() }

答案 2 :(得分:0)

您可以将filtermapflatMapIterable组合在一起,需要跳过的内容可以使用0个元素,而要映射则使用1个元素。在这里

flux.flatMapIterable {
     val name = it.name
     if (name != null) listOf(functionThatRequiresAString(name)) else listOf()
}

RxJava具有更具体的flatMapMaybe,但是Reactor似乎没有对应的版本。