Лямбда-выражения (->
) поставлялись с Java 8. Чтобы использовать код в Java 7, необходимо заменить их на анонимные классы.
Если вы используете IDE, например IntelliJ, он может выполнить эту работу длявы.Переместите курсор на ->
и нажмите ALT + ENTER
.Должно появиться всплывающее окно, и должна быть опция Replace lambda with anonymous class
.
.filter(a -> {
if (a.getJavaType().getSimpleName().equalsIgnoreCase("string")) {
return true;
} else {
return false;
}
})
до
.filter(new java.util.function.Predicate<SingularAttribute<MyEntity, ?>>() {
@Override
public boolean test(SingularAttribute<MyEntity, ?> a) {
if (a.getJavaType().getSimpleName().equalsIgnoreCase("string")) {
return true;
} else {
return false;
}
}
})
Также вам нужно избавиться от всего, что вы используете, от java.util.function
пакет.
Вы можете заменить .filter()
на цикл for и оператор if внутри него.Для .map()
необходимо изменить ранее отфильтрованную коллекцию с помощью цикла for.
new Specification<MyEntity>() {
@Override
public Predicate toPredicate(Root<MyEntity> root, CriteriaQuery<?> cq, CriteriaBuilder builder) {
List<SingularAttribute<MyEntity, ?>> tempAttributes = new ArrayList<>();
for (SingularAttribute<MyEntity, ?> attribute : root.getModel().getDeclaredSingularAttributes()) {
if (attribute.getJavaType().getSimpleName().equalsIgnoreCase("string")) {
tempAttributes.add(attribute);
}
}
final Predicate[] predicates = new Predicate[tempAttributes.size()];
for (int i = 0; i < tempAttributes.size(); i++) {
predicates[i] = builder.like(root.<MyEntity>get(tempAttributes.get(i).getName()), finalText);
}
return builder.or(predicates);
}
};
Я сам не пробовал, но это должно сработать или, по крайней мере, дать вам первые шаги.