否定filterWhen和hasElement

chr*_*con 4 java project-reactor

我正在学习Flux和Mono,并在尝试检查Redis中是否不存在键时碰壁。我需要过滤通量,并且如果键存在,则要删除该元素。我在文档中找不到执行此操作的方法,我只能过滤是否存在该密钥。我需要相反。

client.request(MWS_EU, Orders, ordersRequest, ListOrdersResponse.class)
    .flatMapIterable(listOrdersResponse -> listOrdersResponse.getOrders())
    .filterWhen(order -> isNewOrder(order.getOrderId()))
    .flatMap(...)
Run Code Online (Sandbox Code Playgroud)

和检查redis:

private Mono<Boolean> isNewOrder(String orderId) {
    return redisOrders.opsForValue().get(orderId).hasElement();
} 
Run Code Online (Sandbox Code Playgroud)

有什么干净的方法可以过滤我的Flux以​​仅在键不存在时保留元素?

我不想用block()

Lin*_*ica 5

您可以将方法更改为以下内容:

private Mono<Boolean> isNewOrder(String orderId) {
    return redisOrders.opsForValue().get(orderId).hasElement().map(b -> !b);
} 
Run Code Online (Sandbox Code Playgroud)

通过使用map()方法,您可以将所返回的值求反hasElement()