Esper将结果转换为java.util.Map

时间:2014-06-28 11:06:28

标签: esper

我是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();

1 个答案:

答案 0 :(得分:1)

注册UpdateListener时,它会接收EventBean实例。 “eventBean.getUnderlying()”返回表示对象,在本例中为Map。