在处理Mono和Flux时,如何避免在kotlin中使用非空断言(!!)

在处理Mono和Flux时,如何避免在kotlin中使用非空断言(!!),kotlin,spring-webflux,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 } Kotlin提供了许多处理可空值的可爱方法。我想

我怎样才能卸下!!接线员:我什么时候有以下代码

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


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

Kotlin提供了许多处理可空值的可爱方法。我想到的一个问题是让

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

Kotlin提供了许多处理可空值的可爱方法。我想到的一个问题是让

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

有一个方便的
mapNotNull
函数,您可以与安全呼叫操作员
一起使用,以提供:

flux.mapNotNull { it.name?.toUpperCase() }

这提供了所需的大、小

输出。有一个方便的
mapNotNull
函数,您可以与safe call操作符
一起使用,以提供:

flux.mapNotNull { it.name?.toUpperCase() }

这提供了所需的大、小

输出,您可以组合
过滤器
映射
,在需要跳过某个内容时使用0个元素,在需要映射该内容时使用1个元素。这里

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

RxJava有更具体的
flatmap可能
,但Reactor似乎没有类似的功能。

您可以组合
过滤器
映射
,需要跳过某个内容时使用0个元素,需要映射时使用1个元素。这里

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

RxJava有更具体的
flatMap可能
,但Reactor似乎没有一个等价物。

它等同于只写
It.name?.toUpperCase()
。它等同于只写
It.name?.toUpperCase()
。Flux类没有mapNotNull方法,它仅用于集合Flux类没有mapNotNull方法,它仅用于集合