有什么方法可以使用谓词来过滤IMap<String, List<Foo>>
中的条目,其中MapStore
的值是对象列表?我的情况如下:
public class Foo {
String bar;
String foo
String key;
//Getters and Setters
}
使用以下方法通过Foo
获取Predicate
的列表。
public List<Foo> getFooListByBar(String bar) {
IMap<String, List<Foo>> fooListIMap = hazelcastInstance.getMap(FOO_MAP);
Predicate predicate = Predicates.equal("bar",bar);
Collection<List<Foo>> fooFiltered = fooListIMap.values(predicate);
//Other steps to retrieve list from Collection
}
上面的代码按预期抛出java.lang.IllegalArgumentException
,但我不知道如何实现上述要求。任何帮助是极大的赞赏。预先感谢。
com.hazelcast.query.QueryException: java.lang.IllegalArgumentException: There is no suitable accessor for 'bar' on class 'java.util.ArrayList'
at com.hazelcast.query.impl.getters.ReflectionHelper.createGetter(ReflectionHelper.java:171) ~[hazelcast-3.12.6.jar:3.12.6]
at com.hazelcast.query.impl.getters.Extractors.instantiateGetter(Extractors.java:152) ~[hazelcast-3.12.6.jar:3.12.6]
at com.hazelcast.query.impl.getters.Extractors.getGetter(Extractors.java:118) ~[hazelcast-3.12.6.jar:3.12.6]
at com.hazelcast.query.impl.getters.Extractors.extract(Extractors.java:73) ~[hazelcast-3.12.6.jar:3.12.6]
at com.hazelcast.query.impl.QueryableEntry.extractAttributeValueFromTargetObject(QueryableEntry.java:171) ~[hazelcast-3.12.6.jar:3.12.6]
at com.hazelcast.query.impl.QueryableEntry.extractAttributeValue(QueryableEntry.java:107) ~[hazelcast-3.12.6.jar:3.12.6]
at com.hazelcast.query.impl.QueryableEntry.getAttributeValue(QueryableEntry.java:61) ~[hazelcast-3.12.6.jar:3.12.6]
at com.hazelcast.query.impl.predicates.AbstractPredicate.readAttributeValue(AbstractPredicate.java:145) ~[hazelcast-3.12.6.jar:3.12.6]
at com.hazelcast.query.impl.predicates.AbstractPredicate.apply(AbstractPredicate.java:62) ~[hazelcast-3.12.6.jar:3.12.6]
您可以查询集合。
请参见Store and filter on list of values for a key in Hazelcast以获取执行JSON的示例,但它与POJO的语法相同。