0

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を使用しているので、集計時に同じ述語を使用してフィルタリングできるようにしたいと考えています。

4

1 に答える 1

2

SqlPredicates (および Predicate / PredicateBuilder 述語) は現在、集計内ではサポートされていません。ただし、このような単純な呼び出し用に独自の Predicate を実装できます。私が覚えている限り、3.6で修正されると思います。

于 2015-08-11T15:37:58.487 に答える