@Test
public void testSimpleAfterMatchSkip() throws Exception {
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
DataStream<Tuple2<Integer, String>> input = env.fromElements(
new Tuple2<>(1, "a"),
new Tuple2<>(2, "a"),
new Tuple2<>(3, "a"),
new Tuple2<>(4, "a"));
Pattern<Tuple2<Integer, String>, ?> pattern =
Pattern.<Tuple2<Integer, String>>begin("start", AfterMatchSkipStrategy.skipPastLastEvent())
.where(new SimpleCondition<Tuple2<Integer, String>>() {
@Override
public boolean filter(Tuple2<Integer, String> rec) throws Exception {
return rec.f1.equals("a");
}
}).times(2);
PatternStream<Tuple2<Integer, String>> pStream = CEP.pattern(input, pattern);
DataStream<Tuple2<Integer, String>> result = pStream.select(new PatternSelectFunction<Tuple2<Integer, String>, Tuple2<Integer, String>>() {
@Override
public Tuple2<Integer, String> select(Map<String, List<Tuple2<Integer, String>>> pattern) throws Exception {
return pattern.get("start").get(0);
}
});
List<Tuple2<Integer, String>> resultList = new ArrayList<>();
DataStreamUtils.collect(result).forEachRemaining(resultList::add);
resultList.sort(Comparator.comparing(tuple2 -> tuple2.toString()));
List<Tuple2<Integer, String>> expected = Arrays.asList(Tuple2.of(1, "a"), Tuple2.of(3, "a"));
assertEquals(expected, resultList);
}