【发布时间】:2019-04-09 08:28:00
【问题描述】:
我想做;
从 CEP 开始,使用 map 结构中包含的任何 arraylist 元素,然后继续使用我已经开始的其余 arraylist 元素。
地图和图案结构:
final Map< Integer,ArrayList<String>> deger = new HashMap<Integer,ArrayList<String>>();
deger.put(1,new ArrayList<String>(Arrays.asList("h:1","l:1","g:0")));
deger.put(2,new ArrayList<String>(Arrays.asList("h:1","l:1","g:1")));
deger.put(3,new ArrayList<String>(Arrays.asList("h:2","l:3","g:1")));
deger.put(4,new ArrayList<String>(Arrays.asList("h:0","l:2","g:2")));
for(int i=1;i<deger.size()+1;i++) {
temp1.add(deger.get(i));
}
Pattern<String,?> pattern = Pattern.<String>begin("start").where(
new SimpleCondition<String>() {
// @Override
public boolean filter(String value) throws Exception {
for (ArrayList<String> aa: temp1){
for (String dd : aa)
if(value.equals(dd)){
return true;
}
}
return false;
}
}
).followedBy("middle").where(
new SimpleCondition<String>() {
@Override
public boolean filter(String value) throws Exception {
return value.equals(temp1.get(1));
}
}
).followedBy("end").where(
new SimpleCondition<String>() {
@Override
public boolean filter(String value) throws Exception {
return value.equals(temp1.get(2));
}
}
);
我的目标是警告地图中的数组列表元素,但数组列表元素的顺序并不重要,因为其中有流。我想继续处理这个数组的剩余元素,我可以在其中返回信息当我从这里的任何数组开始时这个数组。例如:
Incoming data = "l:1","h:1","g:0"
my pattern = "h:1","l:1","g:0"
Start -> l:1 find
Middle -> g:0 or h:1 | h:1 find
End -> g:0 find -> alarm
【问题讨论】:
-
嘿,
temp1到底是什么? -
CEP在某种程度上是基于时间序列的。如果您不在乎时间,为什么不直接使用循环来查找元素?
-
我在模式函数的正上方添加了 temp1
-
我实时工作,所以时间很重要
-
好的,澄清一下。您想发出警报,如果列表中的任何模式以任何可能的顺序出现,但所有元素必须属于同一个列表?因此,如果
"h:1","l:1","g:0"以任何顺序出现但如果 "h:1","l:1","g:2" 那么这里就不会有警报了吗?
标签: java apache-flink complex-event-processing