Я работаю над фильтром, который сортирует разные типы данных. Когда пользователь выбирает «Неверно» в качестве фильтра, отображается информация, которая проходит через «неправильное» значение. Проблема в том, что отображаются пустые значения и пробелы, которых не должно быть. Эти значения должны отображаться под другим фильтром. Что мне нужно сделать в приведенном ниже коде, чтобы любые пустые / нулевые значения не отображались в «неправильном» фильтре?
public static Specification<itemData> hasFreeItem(final String[] filter) {
return new Specification<itemData>() {
public Predicate toPredicate(Root<itemData> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
if (isEmpty(filter)) {
return null;
}
String maxCurrValue = "1000";
Collection<Predicate> predicates = new ArrayList<>();
Collection<Predicate> incorrect = new ArrayList<>();
for(String obj : filter) {
if (obj.equals("incorrect")) {
boolean has1000 = false;
boolean has500 = false;
boolean hasContains = false;
for (String temp : filter) {
if (temp.equals("1000")) {
has1000 = true;
} else if (temp.equals("500")) {
has500 = true;
}
else if (temp.equals("contains")) {
hasContains = true;
}
}
if (!has1000) {
incorrect.add(builder.notEqual(root.join(itemData_.productData).join(productData_.contents, JoinType.LEFT).get(Contents_.freeItems), "1000"));
}
if (!has500) {
incorrect.add(builder.notEqual(root.join(itemData_.productData).join(productData_.contents, JoinType.LEFT).get(Contents_.freeItems), "500"));
}
if (!hasContains) {
incorrect.add(builder.notEqual(root.join(itemData_.productData).join(productData_.contents, JoinType.LEFT).get(Contents_.freeItems), "A"));
incorrect.add(builder.notEqual(root.join(itemData_.productData).join(productData_.contents, JoinType.LEFT).get(Contents_.freeItems), "No"));
}
Predicate neverMostRecent = builder.lessThan(root.join(itemData_.productData).join(productData_.contents, JoinType.LEFT).get(Contents_.freeItems), maxCurrValue);
incorrect.add(neverMostRecent);
} else if (obj.equals("contains")) {
predicates.add(builder.equal(root.join(itemData_.productData).join(productData_.contents, JoinType.LEFT).get(Contents_.freeItems), "No"));
} else if (obj.equals("")) {
predicates.add(builder.isNull(root.join(itemData_.productData).join(productData_.contents, JoinType.LEFT).get(Contents_.freeItems)));
predicates.add(builder.equal(root.join(itemData_.productData).join(productData_.contents, JoinType.LEFT).get(Contents_.freeItems), ""));
} else if (obj.equals("A")) {
predicates.add(builder.notEqual(root.join(itemData_.productData).join(productData_.contents, JoinType.LEFT).get(Contents_.itemDerived), ""));
} else {
predicates.add(builder.equal(root.join(itemData_.productData).join(productData_.contents, JoinType.LEFT).get(Contents_.freeItems), obj));
}
}
Predicate predicate = builder.or(predicates.toArray(new Predicate[predicates.size()]));
if (incorrect.isEmpty()) {
return predicate;
}
Predicate incorrectPredicate = builder.and(incorrect.toArray(new Predicate[incorrect.size()]));
return builder.or(predicate, incorrectPredicate);
}
};
}