【发布时间】:2015-01-12 11:36:09
【问题描述】:
Block 是一些代表类型的长期存在的实例,例如Minecraft BlockType 草、green_wool 等。
我正在尝试找到一个 DataStructure 可以有效地存储和测试给定的 BlockPattern(如果您熟悉 Minecraft,可以考虑像黑曜石门户、Wither 等)但如果您不熟悉,则能够创建一个可以测试给定结构的类,该结构是由相对于所放置块的给定 Vector3i 处的块构建的。
Vector3i 表示给定谓词可以匹配的“块模式”中位置的整数向量。
例如你可以有一个谓词来测试任意块属性“热度”,以测试火和熔岩的真实性。
所以与其每次扫描整个模式以确保世界中的块位置,匹配谓词,我正在考虑扭转问题。
缓存一个方块在多图模式中的潜在位置,并获取所有潜在位置,以限制之后发生的检查量。
所以我有一个Multimap<Predicate<Block>,Vector3i> patternLookup 缓存。
这表示允许在 BlockPattern 中找到一个块的潜在位置。
所以玩家放置了一个方块,我需要过滤多重地图,收集方块被“允许”(谓词为真)存在的所有可能位置。
但是,作为优化步骤,我认为只测试可能匹配的谓词(就身份而言)可能会更快。 (三年后我不确定这个假设是否正确)
如何使用 guava 的功能特性过滤多图的内容以获取值的集合? (或者我最好只是迭代EntrySet?)
例如
【问题讨论】:
-
当然,遍历 entrySet,但是为什么你首先要在
Predicate上键入Multimap? -
我提供了一个 API,因此另一个应用程序可以提供谓词来匹配 3d 体素数组,通过允许它们提供谓词来匹配他们需要的任何东西。我将提供的谓词作为优化措施,所以我只需要检查匹配的向量并返回重要的结果。 github.com/ryantheleach/MemoryStones-Sponge/blob/master/src/…
-
是的,没有比迭代
entries()或asMap().entrySet()更好的选择了,具体取决于您想要的输出格式。
标签: java filter functional-programming guava predicates