java - 使用 SqlPredicate 聚合时出现 Hazelcast 错误

标签 java aggregate hazelcast hazelcast-imap

我正在尝试使用 SqlPredicate 谓词在 Hazelcast 中的 map 上执行搜索和聚合。当像下面这样搜索时,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 接口(interface),所以我认为它应该可以工作。

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

最佳答案

当前聚合内部不支持 SqlPredicates(以及 Predicates/PredicateBuilder predicates)。但是,您可以为此类简单的调用实现自己的谓词。据我所知,我猜它会在 3.6 中得到修复。

关于java - 使用 SqlPredicate 聚合时出现 Hazelcast 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31945213/

相关文章:

java - 为什么 Arrays.asList(charArray).indexOf 总是返回 -1?

java - Java中如何将一个POJO映射到另一个POJO?

sql-server - 将 PostgreSQL string_agg 移植到 SQL Server,ORDER BY 有问题

Hadoop 与 Hazelcast

java - Runtime.getRuntime().exec() 调用的命令提示符返回并打印 "Not Enough memory resources are available to process this command"

java - Grails:仅在生产 tomcat 服务器中运行时才出现 RestBuilder 异常

ElasticSearch - 按空格分割的术语聚合

sql - 如何 self 加入/分组以获得总和?

java - 如何在 eclipse 中使用 Hazelcast 和 tomcat

java - 使用 hibernate 二级缓存和 hazelcast 进行数据关联