使用SqlPredicate聚合时出现Hazelcast错误

时间:2015-08-11 14:55:12

标签: java aggregate hazelcast hazelcast-imap

我正在尝试使用SqlPredicate谓词在Hazelcast中的地图上执行搜索和聚合。当如下搜索时,SqlPredicate完美地运行:

imap = //get map from Hazelcast
Collection c = imap.values(new SqlPredicate("field=value"));

但是,如果我尝试进行以下聚合,我会得到一个ClassCastException:

imap = //get map from Hazelcast

PropertyExtractor<-,-> pe = x -> x.getValue();
SqlPredicate p = new SqlPredicate("field=value");

Supplier<-,-,-> s = Supplier.fromPredicate(p, Supplier.all(pe));
int x = imap.aggregate(s, Aggregations.integerMax());

我也尝试创建自己的自定义谓词,它是SqlPredicate的包装器:

public static MyPredicate implements Predicate<-,-> {
    private SqlPredicate pred;

    public MyPredicate(String s){
        pred = new SqlPredicate(s);
    }

    @Override
    public boolean apply(Entry<-,-> arg0){
        return pred.apply(arg0);
    }
}

这会导致NullPointerException,并且永远不会达到apply()方法。

这是Hazelcast中的错误吗?或者是否有理由不能使用SqlPredicate来创建供应商? SqlPredicate实现了Predicate接口,所以我认为它应该可以工作。

我目前正在搜索时使用SqlPredicate,所以我希望能够在聚合时使用相同的谓词进行过滤。

1 个答案:

答案 0 :(得分:2)

聚合内部当前不支持SqlPredicates(和Predicates / PredicateBuilder谓词)。但是,您可以为这些简单的调用实现自己的谓词。据我所知,我想它将在3.6中修复。