2
Этот код должен возвращать строку Optional
, если задано siteUrl
содержит ключ из предопределенного списка пар (или в противном случае).Как вернуть необязательную строку с использованием потоков Java 8
Есть ли лучший способ, чем использовать new Pair(null, null)
здесь? Или, может быть, изменить все выражение?
static Optional<String> get(String siteUrl) {
return Optional.ofNullable(URL_TO_ENVIRONMENT
.stream()
.filter(p -> siteUrl.contains(p.getKey()))
.findFirst().orElse(new Pair(null, null)).getValue());
}
private static final List<Pair> URL_TO_ENVIRONMENT = buildList();
private static List<Pair> buildList() {
return Arrays.asList(
new Pair("aaa.mysite.com", "aaa_something"),
new Pair("bbb.mysite.com", "bbb_something"),
new Pair("ccc.mysite.com", "ccc_comething"));
}
Вау, это было быстро. Мне просто нужно «любое совпадение». спасибо, Миша! – Alex
Я бы предпочел 'URL_TO_ENVIRONMENT.stream(). Filter (p-> siteUrl.contains (p.getKey())). FindAny(). Map (Pair :: getvalue);'. Таким образом, отображение выполняется за пределами трубопровода, что сокращает срок службы трубопровода (меньше глубина стека, больше шансов на встраивание и т. Д.). –
@TagirValeev В моем наблюдении потоковые операции на «Необязательном» ('map',' filter', 'flatMap'), как правило, вызывают людей. Поэтому у меня есть (очень) небольшое предпочтение, чтобы их избежать. – Misha