gpt4 book ai didi

java - 为 map 中的每个元素流口水

转载 作者:行者123 更新时间:2023-11-29 08:51:38 26 4
gpt4 key购买 nike

drools 中的禁忌之一包括在结果(then 子句)中手动迭代集合。我需要编写一个流口水,它可以有效地遍历 map ,同时为该 map 中的每个键值对做一些事情。换句话说,我需要在 drools 中复制 for-each 循环的行为,而无需实际编写 for-each 循环。

现在,我意识到我可以在结果中编写一个 for-each 循环。我想让我的代码尽可能接近流口水标准。我在下面包含了一个更具体的示例。

我有一个字符串和颜色的映射。

Map<String, Color> colorMap

对于 map 中的每种颜色,我想检查不同的集合以找到该颜色的确切代码。

Map<Color, ColorCode> colorCodes

Java 方言方法类似于以下内容:

for (Map.Entry<String, Color> entry : colorMap.entrySet())
{
ColorCode code = colorCodes.get(entry.getValue());

thenconsequence.do(code);
}

如何使用 drools 方言完成类似的事情?

更新:我越想这个问题,就越担心我不应该在 drools 的上下文中进行这种 map 查找/迭代。正确的做法可能是将这些集合的事实对象表示插入到工作内存中。例如,我可能将每种颜色包装在一个 colorFact 中,其中包含 Color 和一个指示颜色名称的字段。与代码相同。然后我可以按照以下方式写一个流口水:

when
Color(name=="blue", $c:color)
ColorCode(name == "blue", $code:colorCode)
then
$code.printCode();
end

如果这是解决问题的最佳方式,我担心我将不得不添加的大量事实。我已经有几千了。这将创造更多。我不担心内存力。相反,我担心遍历所有这些集合并将它们的元素添加到工作内存中所需的时间。任何人都可以评论这是否是执行此操作的最佳方法,或者是否存在更好的方法?

最佳答案

虽然这可以使用一组简单的 Java 语句来完成,但这里是如何在单个规则中完成它,插入等的开销最少(我认为):

rule "matchcolorcode"
when
$cm: ColorMap()
Map.Entry( $key: key, $color: value ) from $cm.entrySet()
$ccm: ColorCodeMap( $ccm.containsKey($key) )
then
System.out.println( $key + ": " + $color + ", " + $ccm.get($key) );
end

事实是 HashMap 的通用实例化的简单包装器,例如:

class ColorMap extends HashMap<String,Color> {}

关于java - 为 map 中的每个元素流口水,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22547374/

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