Java 正在将数据加载到hashmap<;字符串,HashMap<;字符串,HashMap<;字符串,ArrayList<;ClassOb>&燃气轮机&燃气轮机&燃气轮机;

Java 正在将数据加载到hashmap<;字符串,HashMap<;字符串,HashMap<;字符串,ArrayList<;ClassOb>&燃气轮机&燃气轮机&燃气轮机;,java,Java,我试图将数据加载到哈希映射的哈希映射,但我一直得到空指针,不确定我是否做了正确的事情 我希望我的散列图基于三个键SalesAreaCode、year和product。我想把剩下的存储在arraylist中。我想传递销售区号、年份和产品,并列出与这三个键相关的所有产品,如客户、数量、价格: 我真的需要帮助或有人给我指出正确的方向。任何帮助都将不胜感激!!艾伦 代码: 公共HashMap getSalesDetails(连接con) { HashMap>hmpSales= 新HashMap>();

我试图将数据加载到哈希映射的哈希映射,但我一直得到空指针,不确定我是否做了正确的事情

我希望我的散列图基于三个键SalesAreaCode、year和product。我想把剩下的存储在arraylist中。我想传递销售区号、年份和产品,并列出与这三个键相关的所有产品,如客户、数量、价格: 我真的需要帮助或有人给我指出正确的方向。任何帮助都将不胜感激!!艾伦

代码:

公共HashMap getSalesDetails(连接con)
{
HashMap>hmpSales=
新HashMap>();
销售人员;
HashMap hmpSalProd=新的HashMap();
HashMap hmpSalYear=
新HashMap>();
尝试
{
pst=con.prepareStatement(sql);
rs=pst.executeQuery();
while(rs.next())
{
s=新销售额();
如果(!(hmpSalProd.containskey(rs.getString(“产品”)))
{
s、 setSalesCode(rs.getString(“sacd”);
s、 setCustomerCode(rs.getString(“custcd”);
s、 设定年份(rs.GEINT(“年份”);
s、 setProduct(rs.getString(“产品”));
s、 设定价格(rs.getDouble(“价格”));
s、 设置数量(rs.getInt(“数量”);
hmpSalProd.put(rs.getString(“产品”),
新的ArrayList(Arrays.asList);
}
其他的
{
s、 setSalesCode(rs.getString(“sacd”);
s、 setCustomerCode(rs.getString(“custcd”);
s、 设定年份(rs.GEINT(“年份”);
s、 setProduct(rs.getString(“产品”));
s、 设定价格(rs.getDouble(“价格”));
s、 设置数量(rs.getInt(“数量”);
hmpSalProd.get(rs.getString(“产品”)).add(s);
}
if(!(hmpSalYear.containsKey(String.valueOf(rs.getInt(“年”))))
{
hmpSalYear.put(字符串值(rs.getInt(“年”)),hmpSalProd);
}
其他的
{
hmpSalYear.get(String.valueOf(rs.getInt(“年”))。
获取(rs.getString(“产品”))。添加;
}
if(!(hmpSalArea.containsKey(rs.getString(“sacd”)))
{
hmpSales.put(rs.getString(“sacd”),hmpSalYear);
}
其他的
{
获取(rs.getString(“sacd”))。
get(String.valueOf(rs.getInt(“年”))。
获取(rs.getString(“产品”))。添加;
}
}
pst.close();
rs.close();
}
捕获(SQLSE异常)
{
System.out.println(“加载错误:+se.getMessage());
}
返回hmpSales;
}          

我建议定义两个类:

  • 存储SalesAreaCode、year和product的
    SalesKey
    类,覆盖equals和hashCode,不可更改(创建后无法更改值)
  • 存储要映射到销售密钥(包括SalesAreaCode、年份和产品)的数据的
    SalesData

然后您将能够使用
地图
。这更容易理解,从而更容易实现您想要实现的目标。

编写一些表示您的数据的POJO,而不是使用
HashMap
您可以发布异常stacktrace吗?从哪里获得NPE?新的ArrayList(Arrays.asList));s不是数组…您的代码非常糟糕,请重新修改并更正编译错误。
 public HashMap<String, HashMap<String, HashMap<String, ArrayList<Sales>>>> getSalesDetails(Connection con)
{
        HashMap<String, HashMap<String, HashMap<String, ArrayList<Sales>>>>> hmpSales =
        new  HashMap<String, HashMap<String, HashMap<String, ArrayList<Sales>>>>>();
        Sales s;
        HashMap<String,ArrayList<Sales>> hmpSalProd = new HashMap<String, ArrayList<Sales>>();
        HashMap<String,HashMap<String,ArrayList<Sales>>> hmpSalYear = 
        new HashMap<String, ArrayList<Sales>>>();    

       try
       {
             pst = con.prepareStatement(sql);
       rs=pst.executeQuery();
       while(rs.next())
       {
                  s=new Sales();

                  if(!(hmpSalProd.containskey(rs.getString("product"))))
                  {
                       s.setSalesCode(rs.getString("sacd"));
                       s.setCustomerCode(rs.getString("custcd"));
                       s.setYear(rs.getInt("year"));
                       s.setProduct(rs.getString("product"));
                       s.setPrice(rs.getDouble("price"));
                       s.setQty(rs.getInt("qty"));
                       hmpSalProd.put(rs.getString("product"),
                       new ArrayList<Sales>(Arrays.asList(s)));
                  }
                  else
                  {
                      s.setSalesCode(rs.getString("sacd"));
                      s.setCustomerCode(rs.getString("custcd"));
                      s.setYear(rs.getInt("year"));
                      s.setProduct(rs.getString("product"));
                      s.setPrice(rs.getDouble("price"));
                      s.setQty(rs.getInt("qty"));
                      hmpSalProd.get(rs.getString("product")).add(s);
                  }
                  if(!(hmpSalYear.containsKey(String.valueOf(rs.getInt("year")))))
                  {
                      hmpSalYear.put(String.valueOf(rs.getInt("year")),hmpSalProd);
                  }
                  else
                  {
                      hmpSalYear.get(String.valueOf(rs.getInt("year"))).
                      get(rs.getString("product")).add(s);
                  }

                  if(!(hmpSalArea.containsKey(rs.getString("sacd"))))
                  {
                     hmpSales.put(rs.getString("sacd"),hmpSalYear);
                  }
                  else
                  {
                      hmpSales.get(rs.getString("sacd")).
                      get(String.valueOf(rs.getInt("year"))).
                      get(rs.getString("product")).add(s);
                  }

          }
          pst.close();
          rs.close();
     }
     catch(SQLException se)
     {
           System.out.println("error loading: " + se.getMessage());
     }
     return hmpSales;

}