0

我正在尝试将数据加载到哈希映射的哈希映射中,并且我不断收到空指针并且不确定我是否在做正确的事情。

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

代码:

 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;

}          
4

1 回答 1

0

我建议定义 2 个类:

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

然后,您将能够使用Map<SalesKey, SalesData>. 这更容易理解,因此更容易实现您想要实现的目标。

于 2013-01-14T11:27:56.260 回答