代码之家  ›  专栏  ›  技术社区  ›  baao

filterwhen和hasselement的否定

  •  4
  • baao  · 技术社区  · 6 年前

    我正在学习flux和mono,当我试图检查redis中是否有一把钥匙时,我撞到了墙上。我需要过滤我的流量,如果钥匙存在,我想去掉这个元件。我在文档中找不到这样做的方法,我能过滤的只是保留密钥是否存在。我需要相反的。

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

    以及对redis的检查:

    private Mono<Boolean> isNewOrder(String orderId) {
        return redisOrders.opsForValue().get(orderId).hasElement();
    } 
    

    什么是一种干净的方法来过滤我的流量以保持元素只有在键不存在的情况下?

    我不想用 block() .

    1 回复  |  直到 6 年前
        1
  •  5
  •   Lino    6 年前

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

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

    通过使用 map() 方法只需反转 hasElement() .