我正在尝试将AfterMatchSkipStrategy skipPastLastEvent()
应用到我的模式中。但是问题是,我得到的结果与不应用skipstrategy (NoSkip)
时的结果相同。
丢弃在比赛开始之后但结束之前开始的所有部分比赛,这是跳过策略SKIP_PAST_LAST_EVENT
的描述。据我所知,一旦匹配模式,所有部分匹配都将被丢弃。
AfterMatchSkipStrategy skipStrategy = AfterMatchSkipStrategy.skipPastLastEvent();
Pattern<GraphMap, ? > pattern2 = Pattern.<GraphMap>begin("start", skipStrategy).where(new IterativeCondition<GraphMap>() {
@Override
public boolean filter(GraphMap graphMap, Context<GraphMap> context) throws Exception {
if (graphMap.getSubjectValue().equals("basketballplayer1"))
return graphMap.getObjectValueString().equals("Miss");
return false;
}
}).followedBy("middle").where(new IterativeCondition<GraphMap>() {
@Override
public boolean filter(GraphMap graphMap, Context<GraphMap> context) throws Exception {
for( GraphMap previousGraphMap : context.getEventsForPattern("start")){
if (graphMap.getSubjectValue().equals(previousGraphMap.getSubjectValue())){
return graphMap.getObjectValueString().equals("Basket");
}
}
return false;
}
}).oneOrMore().followedBy("end").where(new IterativeCondition<GraphMap>() {
@Override
public boolean filter(GraphMap graphMap, Context<GraphMap> context) throws Exception {
for ( GraphMap previousGraphMap : context.getEventsForPattern("middle")){
if( graphMap.getSubjectValue().equals(previousGraphMap.getSubjectValue())){
return graphMap.getObjectValueString().equals("Miss");
}
}
return false;
}
}).within(Time.seconds(10))
以上是我的图案序列。在这种情况下,我需要的输出是篮球运动员1的(小姐篮+小姐)序列。但是当我输入
Miss, Miss, Basket, Basket, Miss
我正在获得所有匹配项:
[Miss, Basket, Basket, Miss] ,
[Miss, Basket, Miss]
[Miss, Basket, Miss] {of the second miss in the sequence} etc.
我在做错什么吗?我想要的输出仅为[Miss, Basket, Basket, Miss]
,并非NoSkip中的所有其他模式都能给我。
在此先感谢您的答复。这将是巨大的帮助。