如何使用每个 Flux 元素获得的 Mono 值来过滤 Flux?

How can I filter a Flux using the value of a Mono that I get per Flux element?

假设我有一个 Flux<User> 和另一个 Mono<Department>Department 有 id 和 departmentName。

我有一项服务returns用户所属的部门:

departmentService.getByUserId(userId: Int) : Mono<Department>

我想过滤不在某个部门(departmentService.getByUserId(userId: Int) returns 一个空的单声道)或在 departmentName 不是 HR 的部门中的用户。如何做到这一点?

users.flatMap { user ->
    departMentService.getByUserId(user.id)
    ...
}

我的解决方案包括使用 Pair 传播我在过滤器中需要的信息的聚合:

users.flatMap { user ->
    departMentService.getByUserId(user.id)
       .map { Pair(user, it) }
}.filter { it.second == null || it.second.departmentName != "HR" }