我想更改此代码以使其更美观:
List<Criteria> filters = new ArrayList<Criteria>();
if (null != searchForm.getScope()) {
List<Criteria> scopeCriteria = this.getApplications(searchForm.getScope())
.stream()
.map(app -> Criteria.where("appCreation").is(app.getCode()))
.collect(Collectors.toList());
<<<< HOW TO APPLY A REDUCE METHOD ON scopeCriteria >>>
if (!scopeCriteria.isEmpty()) {
if (scopeCriteria.size() == 1) {
filters.add(scopeCriteria.get(0));
}
else {
Criteria crit = new Criteria();
filters.add(crit.orOperator(scopeCriteria.toArray(new Criteria[scopeCriteria.size()])));
}
}
else {
filters.add(Criteria.where("appCreation").is("unknown"));
}
}
我想要得到的是:
this.getApplications(searchForm.getScope())
app
构建一个Criteria
。scopeCriteria
到filters
上填充条件。我对使用此代码感到非常烦恼,我当时正在考虑使用Optional
和其他一些流功能,但是我不太想知道如何获得它。
有什么想法吗?
答案 0 :(得分:0)
不是很干净的上下文,但是这个上下文呢?如我所见,List<Criteria> filters
仅包含一个元素。
public static Criteria getFiltersByCriteria(Scope scope, Criteria criteria) {
if (scope == null)
return null;
Criteria[] scopeCriteria = getApplications(scope).stream()
.map(app -> criteria.is(app.getCode()))
.toArray(Criteria[]::new);
if (scopeCriteria.length == 0)
return Criteria.where("appCreation").is("unknown");
if (scopeCriteria.length == 1)
return scopeCriteria[0];
return new Criteria().orOperator(scopeCriteria);
}