Я хотел бы изменить этот код, чтобы сделать его более элегантным:
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
и некоторых других потоковых функций, но я не совсем понимаю, как его получить.
Есть идеи?