2016-11-30 39 views
0

我有一个java.util.Map对象,它具有String值。我需要将java.util.Map的String值之一与myString值进行比较。下面是有价值的变量来更好地理解问题。需要比较两个字符串作为流水线中的字符串元素列表处理

myMap[STATE.code]="AK","MI","GA","NY","OH","CA" 

myString="MI","OH" 

注:( “AK”, “MI”, “GA”, “NY”, “OH”, “CA”)和( “MI”, “OH”)是完整的字符串值,而不是逗号分隔值。

我需要弄清楚“AK”,“MI”,“GA”,“NY”,“OH”,“CA”中是否存在“MI”或“OH”中的任何一个。 因此,我将myString和myMAp [STATE.code]值视为'列表元素'并尝试对两者进行比较。我尝试了Collections.disjoint函数来查找列表中是否有任何公共元素。

在DSL:

[condition][]Putting codes into variable=$code : String(this == myMap[STATE.code]) 

[condition][]Codes exist in list {myString}= Boolean(java.util.Collections.disjoint(java.util.Arrays.asList($code) , java.util.Arrays.asList({myString})) == false) 

[condition][]Codes doesn't exist in list {myString}= not(Boolean (java.util.Collections.disjoint(java.util.Arrays.asList($clientCatCode) , java.util.Arrays.asList({myString})) == false)) 

虽然DSL编译成功,但没有决定出来的,并也无任何异常或错误。似乎这种方法是不正确的。任何人都可以建议我任何方法或帮助纠正我的DSL。

+0

我建议你编写和发布一个可编译和可执行的Java代码片段,其中包含具有两个或三个元素以及一个或两个“我的”字符串对象的“我的”Map对象。然后,我们可以同意在Map和String组合的情况下表示真或假的(Java)代码。这样做,我们可以开始讨论Drools。最后,我们可以谈论一个合理的DSL。 – laune

回答

0

如果状态代码是在地图的关键,我们可以检查给定的字符串是存在于地图或不通过检查map.containsValue(字符串),

如果是地图值,我们得到它可以通过map.containsKey(字符串);

+0

STATE.code是保存值(“AK”,“MI”,“GA”,“NY”,“OH”,“CA”)的地图(某些常量)中的关键字。 –

+0

如果我使用map.containsValue()比较myString,那么结果将始终为false。由于myString是(“MI”,“OH”),并且这与map的值部分匹配。此外,myString可以具有随机序列的代码,这些代码可能会或可能不会与地图值序列相匹配。 –

+0

所以myString是一个数组?并且在将两个数组作为对象进行比较时会采用映射值?我不清楚这个问题 –