问题描述
我想把示例代码中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(...)
上方一行。有什么建议吗?
解决方法
您可以将该 lambda 表达式存储在 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);