首页 > 解决方案 > 可迭代不适用于论点

问题描述

我想为 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;
}

我错过了什么?

标签: javaspring-boot

解决方案


您正在尝试迭代ListMap. 你必须改变

searchCriterias.forEach((key, criteria) -> {

searchCriterias.forEach((criteria) -> {

推荐阅读