Я хотел бы выделить код внутри метода map(...)
в примере кода в отдельную строку (код теперь слишком длинный, что влияет на читабельность):
final Specification<PeriodicInvoice> noFilterClause = Specification.where(null);
Optional<Date> of = ...;
of.map(f -> Specification.<PeriodicInvoice> where((root, query, cb) -> cb.greaterThan(root.<Date> get("fromPeriod"), f)))
.orElse(noFilterClause);
Я не хочу писать новую функцию. Я хотел бы встроить извлеченный код на одну строку выше of.map(...)
. Любое предложение?
Вы можете сохранить это лямбда-выражение в переменной типа Function
:
final Specification<PeriodicInvoice> noFilterClause = Specification.where(null);
Optional<Date> of = ...;
Function<Date,Specification<PeriodicInvoice>> mapper =
f -> Specification.<PeriodicInvoice> where((root, query, cb) -> cb.greaterThan(root.<Date> get("fromPeriod"), f));
of.map(mapper)
.orElse(noFilterClause);
Спасибо. Я пробовал именно это, по крайней мере, тысячу раз, но всегда сталкивался с кровавым «Тип цели должен быть выражением функции». Но эй с вашим ответом это работает. Вероятно, раньше я неправильно управлял импортом
Function
. Спасибо!