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