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 を使用して Supplier を作成できない理由はありますか? SqlPredicate は Predicate インターフェースを実装しているので、うまくいくと思います。
現在、検索時にSqlPredicateを使用しているので、集計時に同じ述語を使用してフィルタリングできるようにしたいと考えています。