我试着从地图上得到这样一个随机元素
IMap<Integer, Integer> workWaitTasks = hazelcastInstance.getMap(WORK_WAIT_TASKS);
collectionTask = Collections.singleton(workWaitTasks.values().stream()
.skip(workWaitTasks.isEmpty() ? 0 : new Random().nextInt(workWaitTasks.size()))
.findFirst()
.get());
int taskId = collectionTask.iterator().next();
但我认为最好的方法是使用谓词
我读过这个https://docs.hazelcast.com/imdg/4.2/query/how-distributed-query-works.html#querying-with-sql-like-predicates不幸的是这对我没有帮助
我找不到办法
在sql中是这样的
SELECT column FROM table
ORDER BY RAND()
LIMIT 1
如何在hazelcast中生成正确的谓词?
你能举个例子吗?请帮帮我
我认为没有直接有效的方法可以使用公共API来做到这一点。一种选择是使用Jet:
IMap<Object, Object> sourceMap = instance.getMap("table");
IList<Object> targetList = instance.getList("result");
int samplingFactor = sourceMap.size() / 10;
Pipeline p = Pipeline.create();
p.readFrom(Sources.map(sourceMap))
.filter(item -> item.getKey().hashCode() % samplingFactor == ThreadLocalRandom.current().nextInt(samplingFactor))
.writeTo(Sinks.list(targetList));
instance.newJob(p).join();
上面的代码应该在结果列表中添加大约10个元素,从中很容易得到一个随机条目,但也可能最终得到一个空列表-您可以尝试增加samplingFactor
中的乘数,以获得满意的概率,而无需重新运行作业即可获得一些结果。
使用聚合(IMap.aggregate)和自定义聚合器也可以做到这一点,一些同事可能会提供答案:-)。
问题内容: 我有一个数组叫做 我需要从该数组中获取一个随机值并将其存储在变量中,我该怎么做? 问题答案: 您还可以执行以下操作: 当您有关联数组时,这就是这样做的方法。
问题内容: 可以说我有一个单词列表,我想创建一个将新列表的大小作为参数并返回新列表的方法。我如何从原始sourceList中获得随机单词? 那么,如何以及在哪里可以使用我的随机数? 问题答案: 我找到了适当的解决方案。Random提供了一些返回流的方法。例如ints(size)会创建一个随机整数流。
我有多个数组映射。 我想从多个地图中获取重复地图键的列表。 例如 除了遍历所有地图键,检查集合是否包含键,如果不将键添加到集合中,我想不出任何更干净的方法。有没有办法通过streams来实现这一点?
我正在开发Spring Boot应用程序与Spring Data JPA和H2数据库。我使用的是sping-data-jpa。当我使用ManyTo很多映射器类来获取另一个类的数据时。但是我发现它是NULL。 代码在github上 书班 著者班 测试中的测试代码捕捉器。班 我的代码有错误吗?或者其他方式? 非常感谢。
Hazelcast数据存储 如何通过传递any键获取值(John)。。 在Hazelcast这可能吗...?
如何将侦听器设置为一个映射,该映射的键有一个复杂的对象,并且我只想侦听具有特定键参数值的条目发生的更改。 例如,我有一个类似于此的代码: 但当一个包含“EN”语言的键的条目被更新时,我的回调函数不会被调用。所以我假设我的谓词是错误的。