我有一个java类,如下所示
public class Ball
{
private int size;
private String brand;
private ArrayList<String> colour;
private HashMap<String, String> price;
//getter and setters
}
我想创建Drools规则(java方言)来读取尺寸,品牌和颜色并相应地设置价格图。
color ArrayList应匹配精确的例如如果球有红色,黑色&amp;蓝色颜色在一起,然后应该应用特定规则。
价格图,例如 [{&#34; US&#34;,&#34; 1.79&#34;},{&#34; UK&#34;,&#34; 1.48&#34;},{&#34 ;阿联酋&#34;,&#34; 11.37&#34;}] 。不要把它与json混淆,它是一个java HashMap。
rule "rule 1"
when
ball : Ball
(
size == 14,
brand == "NIVIA",
colour == //here i want to compare exact match of the arraylist.
)
then
ball.setPrice(//here i want to set price map);
end
请帮助创建.drl文件
答案 0 :(得分:0)
首先,我们应该质疑使用List<String>
来保存多种颜色。订单真的很重要吗?您可能希望区分红色球与绿色和蓝色点与白色球与紫色条纹,但即便如此&#34;顺序&#34;单凭赢得无法表达所有细微之处。 Point是,List.equals
(以及Drools中的==
)被定义为当且仅当元素相等时才返回true,逐个。
如果您使用String[]
并致电Arrays.equals()
,则会出现同样的问题。
我认为最好的解决方案是使用
private Set<String> colour;
并将规则写为
rule "rule 1"
when
ball: Ball( size == 14, brand == "NIVIA",
colour == new HashSet( Arrays.asList("Red", "Black", "Blue") ) )
then
ball.setPrice(...);
end
您的Java应用程序可能提供Ball方法:
public boolean hasColours( String... colours )
这将简化规则中的表示法:
ball: Ball( size == 14, brand == "NIVIA",
ball.hasColours("Red", "Black", "Blue") )