【问题标题】:How to check string against multiple collections using streams如何使用流检查多个集合的字符串
【发布时间】:2018-10-06 01:35:28
【问题描述】:

我正在尝试生成具有以下格式的特定字符串:*.*.*.*,可以说是QUEUE1.NONE.QUEUE3.NONE。具体来说,这是我的 rabbitmq 的路由键,用于根据事件集合确定接收特定事件的队列,因此 SET1 将包含 QUEUE1 等的事件等。

下面是我想出的,但我认为它太冗长了,有没有更有效的方法使用流来做到这一点?

使用flatmap 的问题是,如果它在不同的集合中,我必须返回不同的值,而flatmap 只是合并集合。

return Optional.ofNullable(eventName).map(event->{
      StringBuffer sb = new StringBuffer()
          .append(Optional.of(event).filter(SET1::contains).map(t -> VALUE1).orElse(SKIP)).append(DELIMITER)
          .append(Optional.of(event).filter(SET2::contains).map(t -> VALUE2).orElse(SKIP)).append(DELIMITER)
          .append(Optional.of(event).filter(SET3::contains).map(t -> VALUE3).orElse(SKIP)).append(DELIMITER)
          .append(Optional.of(event).filter(SET4::contains).map(t -> VALUE4).orElse(SKIP));
      return sb.toString();

【问题讨论】:

    标签: java string collections java-8 java-stream


    【解决方案1】:

    您不必要地使用选项使事情复杂化。为什么不保持简单?

    String.join(DELIMITER,
        SET1.contains(event) ? VALUE1 : SKIP,
        SET2.contains(event) ? VALUE2 : SKIP,
        SET3.contains(event) ? VALUE3 : SKIP,
        SET4.contains(event) ? VALUE4 : SKIP
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-19
      • 2016-10-17
      • 2012-07-14
      • 1970-01-01
      • 1970-01-01
      • 2016-04-10
      • 2019-06-01
      相关资源
      最近更新 更多