Java Map <string,map <string,integer>用于填充结果

时间:2017-09-10 23:14:12

标签: java mysql hashmap

我想创建一个报告,您选择product和storeName并返回每个日期的所有销售额(在一个范围内)。

帮助我处理其他报告的db视图如下所示: product - store_name - date

到目前为止,我的方法是从列表中的db返回所有记录,然后执行以下操作:

public void salesReport(String product, String store, String date){
    List<RecordSalesInfo> salesResults = salesDao.getSales();
    Map<String, Integer> mapper = new HashMap();

    //calculation
        for (RecordSalesInfo record : salesResults) {
            StringBuilder key = new StringBuilder();
            key.append(record.getProduct()).append(":")
                        .append(record.getStoreName()).append(":")
                        .append(record.getWageredDate()).append(":");

            if (mapper.containsKey(key.toString())) {
                    Integer get = mapper.get(key.toString());
                    get++;
                    mapper.put(key.toString(), get);
            } else {
                    mapper.put(key.toString(), 1);
            }
       }

       for (String key : mapper.keySet()) {
           if(key.toString.equals("Pen:London:13June2016"){ 
               System.out.println("sales:" + mapper.get(key.toString);
           }
       }
}

salesDao中的查询(另存为“RecordSalesInfo”)是:

SELECT
 rs.product AS product,
 rs.store_name AS store,
 rs.date AS date,
 rs.product_id AS productId
 FROM sales rs
 ORDER BY rs.product,rs.store_name,rs.date

我没有查询“Count(blabla)where product ='a'和store_name ='b'和date ='c'”的原因是因为用户经常使用jSlider更改输入(输入=产品) ,存储,日期),这意味着太多的查询。所以我认为最好从db获取所有结果,然后显示用户需要的内容。

A)有更好的方法吗?

B)在下一阶段,用户只会输入产品和商店,我必须按日期返回销售清单,如下所示:

笔 - 伦敦(手动输入) 2016年6月12日100 2016年6月15日30 19July2016 67

到目前为止我所做的事情,我不能只获得销售的日期,而且我必须从hashMap“搜索”所有日期(特定范围)。我认为作为一种解决方案,将“product:storeName”的密钥更改为现有地图,并将另一个地图作为一个值,其中String将是日期,而Integer是销售额。

再次有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

我要做的是我不会保留/保留地图,而是在查询根据JSlider等进行更改时获取结果。

您可以做一件事,当发送查询直到其结果可用时,您可以禁用Jslider并显示一个微调器,通知用户正在进行处理。

一旦结果可用,启用滑块并隐藏微调器。

让地图中的所有数据看起来都不是一个好主意。它将是一种断开连接的数据状态。