如何为Treeset制作每个对象

时间:2016-11-22 15:43:44

标签: java treeset

我有一个项目,我需要在java中使用产品制作erp系统。所以我们说我们有一个灯作为产品,这个灯由螺丝,灯泡等部件组成。 所以我的第一个猜测是使用Treeset并将这些部分放在每个产品树集中。但我只有一类产品,所以如果我制作一个新产品,我该如何为这个新产品提供一套呢?

以下是来自specificoc类产品的代码

private String productID;
private String productName;
private double productPrice;
public ArrayList<Products> prod = new ArrayList<>();


public Products(String productID,String productName, double productPrice)
{
    this.productName = productName;
    this.productID = productID;
    this.productPrice = productPrice;

}

2 个答案:

答案 0 :(得分:1)

注意:此答案已被编辑。它最初建议克隆存储在地图中的产品,但由于担心膨胀,这被改为使用单身人士。

如果产品类有子产品(部件)列表,那么每个子部件都有一个部件列表。

要获取产品的直接子项,您可以使用getPartIDs()方法,该方法仅返回childPartID列表中的元素。 要获取构成此产品的所有部件,您可以使用getAllComponentIDs()方法,该方法将递归遍历子部件列表并返回包含所有部件的列表。

创建产品后,我建议您按名称将其存储在地图中。我目前假设每种产品的单件都是可以接受的。然后,您将处理productID和计数而不是产品的实例。

这看起来像下面这样(注意它只是伪编码,它不会编译):

protected Hashtable<String,Product> productsMap;

public static void CreateProductType(String productId, String productName, dobule ProductPrice, String[] partProductIDs)
{
    // TODO: error case checking
    Product newProduct = new Product(productID, productName, double productPrice, partProductNames)
    productsMap.add(productID, newProduct);
}    

protected Product(String productID,String productName, double productPrice, String[] partProductIDs)
{
    this.productName = productName;
    this.productID = productID;
    this.productPrice = productPrice;
}

public String[] getPartIDs()
{
   return partProductIDs;
}

public static String[] getPartIDs(String productID)
{
   Product p =  productsMap.get(productID);
   return p.partProductIDs();
}

public static String[] getAllComponentIDs(String productID)
{
   Product p =  productsMap.get(productID);
   String[] parts = p.getPartIDs();
   foreach (String productId : parts) {
       // add all child component ids to an array/list and return it
   }

}

答案 1 :(得分:1)

你应该使用地图作为建议的pulekies,但不是按照他建议的方式。每个产品都可以包含其子女的地图。不确定为什么你提到膨胀你的数据库因为这是关于参考。没有涉及对象的克隆。

private String productID;
private String productName;
private double productPrice;
public Hashtable<String,Product> childProducts;


public Products(String productID,String productName, double productPrice)
{
    this.productName = productName;
    this.productID = productID;
    this.productPrice = productPrice;
}

public Products(String productID,String productName, double productPrice, Products[] newChildProducts)
{
    this.productName = productName;
    this.productID = productID;
    this.productPrice = productPrice;

    AddChildProducts(newChildProducts);
}

public String GetProductID()
{
    return productID;
}

public void AddChildProduct(Product product)
{
    InitializeChildProducts();
    childProducts.put(product.GetProductID(),product);
}

private void InitializeChildProducts()
{
    if (childProducts == null)
    {
        childProducts = new Hashtable<String,Product>();
    }
}

public void AddChildProducts(Product[] products)
{
    InitializeChildProducts();
    for (Product prod : products)
    {
        childProducts.put(prod.GetProductID(),prod);
    }
}

public Hashtable<String,Product> GetChildProducts()
{
    InitializeChildProducts()
    return childProducts;
}