我是Esper的新手,并创建了一个以Map形式提供Esper事件的小程序。
我添加了一个监听器,一切都按预期工作,但是,当在时间窗口上执行像count(*)这样的复杂查询时,我很难将结果作为java.util.Map返回。无论查询结果如何,我如何将结果作为标准Map进行进一步处理?
private class EsperUpdateListener implements UpdateListener {
public void update(EventBean[] newEvents, EventBean[] oldEvents) {
System.out.println("Found new event!");
if(newEvents != null) {
System.out.println("newEvents (" + newEvents.length + "):");
for (EventBean e : newEvents) {
System.out.println(" " + e.toString() + "(" + e.getEventType().getName() + ")");
System.out.println(" " + e.getUnderlying().toString());
for (Map.Entry<String,Object> entry : e.getUnderlying().getEntrySet()) {
String key = entry.getKey();
String val = (String)entry.getValue();
System.out.println(" " + key + ": " + val);
}
}
}
if(oldEvents != null) {
System.out.println("oldEvents:");
for (EventBean e : oldEvents) {
System.out.println(" " + e.toString() + "(" + e.getEventType().getName() + ")");
}
}
}
}
我尝试了上面的代码,但它抱怨getUnderlying返回一个Object,而不是一个map。我尝试过铸造,这有点起作用,但并非没有警告:
警告:[未选中]取消选中
Map<String,Object> emap = (Map<String,Object>)e.getUnderlying();
答案 0 :(得分:1)
注册UpdateListener时,它会接收EventBean实例。 “eventBean.getUnderlying()”返回表示对象,在本例中为Map。