OptaPlanner:连接期间或之后过滤的区别



在语义或性能方面,

cf.forEach(Entity.class)
.join(cf.forEach(Entity.class),
Joiners.filtering(myBiPredicate)))
...

cf.forEach(Entity.class)
.join(cf.forEach(Entity.class))
.filter(myBiPredicate)))
...

另外,Joiners是否按给定的顺序执行?(例如,是否建议在参数列表的早期放置过滤器来修剪大量对?)

回答您的第一个问题-不,这两个约束之间没有实际区别。Joiners.filtering(...)存在,因此您可以在ifExists(...)调用中应用过滤器;在执行普通连接时,不妨在连接后执行一个过滤器。

为了回答你的第二个问题,我写了一篇完整的博客文章。是的,最好早点修剪。

最新更新