Как проверить строку для нескольких коллекций, используя потоки - PullRequest
0 голосов
/ 06 октября 2018

Я пытаюсь сгенерировать определенную строку в формате: *.*.*.* это можно сказать 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();

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Вы излишне усложняете вещи с помощью опций.Почему бы просто не сделать это просто?

String.join(DELIMITER,
    SET1.contains(event) ? VALUE1 : SKIP,
    SET2.contains(event) ? VALUE2 : SKIP,
    SET3.contains(event) ? VALUE3 : SKIP,
    SET4.contains(event) ? VALUE4 : SKIP
);
0 голосов
/ 06 октября 2018

Вы можете сделать это так,

List<Set<String>> sets = Arrays.asList(SET1, SET2, SET3, SET4);
List<String> VALUES = Arrays.asList(VALUE1, VALUE2, VALUE3, VALUE4);
String eventDests = IntStream.range(0, 4)
    .mapToObj(i -> sets.get(i).contains(event) ? VALUES.get(i) : SKIP)
    .collect(Collectors.joining(DELIMITER));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...