java - 可迭代不适用于论点
问题描述
我想为 Product 类创建一个规范类。它将有一个 Predicate 类来处理 searchCriterias。
当我尝试迭代 searchCriterias 时出现错误:
The method forEach(Consumer<? super SearchCriteria>) in the type Iterable<SearchCriteria> is not applicable for the arguments ((<no type> key, <no type> criteria) -> {})
这是我的课:
public class ProductSpecifications implements Specification<Product>{
// List of search criterias to be applied to
private final List<SearchCriteria> searchCriterias;
public ProductSpecifications() {
searchCriterias = new ArrayList<SearchCriteria>();
}
@Override
public Predicate toPredicate(Root<Product> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
searchCriterias.forEach((key, criteria) -> {
if (criteria.getOperation().equalsIgnoreCase(">")) {
return builder.greaterThanOrEqualTo(
root.<String> get(criteria.getKey()), criteria.getValue().toString());
}
....
这是我的搜索条件类:
public class SearchCriteria {
private String key;
private String operation;
private Object value;
}
我错过了什么?
解决方案
您正在尝试迭代List
为Map
. 你必须改变
searchCriterias.forEach((key, criteria) -> {
至
searchCriterias.forEach((criteria) -> {