gpt4 book ai didi

java - Hazelcast Java - 谓词。并且忽略除第一个以外的谓词

转载 作者:行者123 更新时间:2023-12-01 17:55:32 25 4
gpt4 key购买 nike

我有一个以类为键的 IMap。该键有两个属性:

 static class MapKey implements Serializable{
String uid;
String service;

public MapKey() {
}

public MapKey(String uid, String service) {
this.uid = uid;
this.service = service;
}

public String getUid() {
return uid;
}

...
}

我仅使用两个简单的值初始化 map :

HazelcastInstance hz = Hazelcast.newHazelcastInstance();
final IMap<MapKey, String> map = hz.getMap("testmap");
map.addIndex("__key#uid", false);
map.put(new MapKey("uid1","service1"),"value1");
map.put(new MapKey("uid1","service2"),"value2");

然后我用 and 构建一个谓词:

    static Predicate<MapKey, String> buildPredicate(MapKey key){
final EntryObject entryObject = new PredicateBuilder().getEntryObject().key();
final List<Predicate<MapKey, String>> predicateList = new ArrayList<>();
predicateList.add(entryObject.get("uid").equal(key.getUid()));
predicateList.add(entryObject.get("service").equal(key.getService()));

final com.hazelcast.query.Predicate predicate = Predicates.and(predicateList.toArray(new Predicate[predicateList.size()]));
return predicate;
}

当我使用此谓词时,它返回仅按 uid 过滤的键,这意味着集合值的大小为 2,而不是预期的大小。

Predicate<MapKey, String> predicate = buildPredicate(new MapKey("uid1","service1"));
Collection<MapKey> values = map.keySet(predicate);

谁能给我解释一下这种行为吗?我缺少什么?

最佳答案

问题是,您对 entryObject 进行操作时,如果它是一个不可变的对象,但它不是不可变的。它实际上是一个构建器,操作 entryObject.get("uid").equal(key.getUid()) 更改其状态并记录谓词条件。这就是为什么 ifeffect 对两个完全相等的谓词执行 Predicates.and() 的原因。

尝试以下操作,它将实现您想要实现的目标。

   static Predicate<MapKey, String> buildPredicate(MapKey key){
final List<Predicate<MapKey, String>> predicateList = new ArrayList<>();
predicateList.add(new PredicateBuilder().getEntryObject().key().get("uid").equal(key.getUid()));
predicateList.add(new PredicateBuilder().getEntryObject().key().get("service").equal(key.getService()));

final com.hazelcast.query.Predicate predicate = Predicates.and(predicateList.toArray(new Predicate[predicateList.size()]));
return predicate;
}

关于java - Hazelcast Java - 谓词。并且忽略除第一个以外的谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60724968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com