Я знаком с Optional.map(mapper)
, который сопоставляет необязательный объект с чем-то другим.Поэтому, если бы я хотел что-то сделать с необязательным Foo
и необязательным Bar
, я мог бы сделать:
Optional<Foo> foobar = foo.map(foo -> foo.addBar(bar))
Это работает примерно так:
Optional<Foo> foobar = foo.isPresent() ? Optional.of(foo.get().add(bar)) : Optional.empty();
Но я вижу повторяющийся шаблон, в котором bar
является необязательным.Функциональность, которую я хочу воспроизвести, выглядит примерно так:
Foo foobar = bar.isPresent() ? foo.add(bar.get()) : foo;
Другими словами, если присутствует другая вещь, позвольте мне сделать с ней что-то в отношении моей существующей вещи;в противном случае, просто верните мне мою существующую вещь.
Я мог бы представить, как сделать свою собственную Optionals.doIfOtherPresent(T object, Optional<U> optional, BiFunction<? super T, ? super U, ? extends T> fn)
.Я бы использовал это так:
Foo foobar = doIfOtherPresent(foo, bar, foo::add);
Есть ли что-то в библиотеке Java, которая уже делает это?