如何在java HashMap中根据产品类别获取产品详细信息?

如何在java HashMap中根据产品类别获取产品详细信息?,java,model,hashmap,dao,Java,Model,Hashmap,Dao,有一个HashMap。我在hashmap中添加了所有产品详细信息。我想显示基于类别的产品详细信息。这意味着所有同类产品都应该展出。我正在尝试为此创建方法。方法名为 public List<Product> getProductsBasedOnCategory(String category) { } DatabaseClass.java public class DatabaseClass { private static Map<Long, Product>

有一个HashMap。我在hashmap中添加了所有产品详细信息。我想显示基于类别的产品详细信息。这意味着所有同类产品都应该展出。我正在尝试为此创建方法。方法名为

public List<Product> getProductsBasedOnCategory(String category)
{

}
DatabaseClass.java

public class DatabaseClass {

    private static Map<Long, Product> products=new HashMap<>();

    public static Map<Long, Product> getProduct()
    {
        return products;
    }

}
公共类数据库类{
私有静态映射产品=新HashMap();
公共静态映射getProduct()
{
退货产品;
}
}
ProductDao.java

private Map<Long, Product> products=DatabaseClass.getProduct();

public ProductDaoImpl()
{
    products.put(1L, new Product(1L,"TV","Entertinement",10000F,250L,"This is best TV!"));
    products.put(2L, new Product(2L,"Computer","Technology",20000F,350L,"My Computer name Hp and SONY ViVo!"));
    products.put(3L, new Product(3L,"DeskTopComputer","Technology",15000F,150L,"My Desktop Computer name Accer and SONY ViVo!"));
}

//Get All products
public List<Product> getAllProducts() {

    return new ArrayList<Product>(products.values());
}

//Get product by product id
public Product getProduct(long pid) {

    return products.get(pid);
}

//To Add the products 
public Product addProduct(Product product) {
    product.setPid(products.size()+1);
    products.put(product.getPid(), product);
    return product;
}

//Update the product
public Product updateProduct(Product product) {
    if(product.getPid()<=0)
    {
        return null;
    }
    products.put(product.getPid(), product);
    return product;
}

// Delete the product
public Product deleteProduct(long pid) {

    return products.remove(pid);

}



//Get the product by category
public List<Product> getProductByCategory(String category) {

    if(products.size()<=0)
    {
        return null;
    }

    else if(category.equals(products.get(Product))
    {



    }
private Map products=DatabaseClass.getProduct();
公共产品daoimpl()
{
产品。放置(1L,新产品(1L,“电视”,“入口”,10000F,250L,“这是最好的电视!”);
产品。放置(2L,新产品(2L,“计算机”,“技术”,20000F,350L,“我的电脑名惠普和索尼维梧!”);
产品。put(3L,新产品(3L,“台式电脑”,“技术”,15000F,150L,“我的台式电脑名Accer和索尼维梧!”);
}
//获取所有产品
公共列表getAllProducts(){
返回新的ArrayList(products.values());
}
//按产品id获取产品
公共产品getProduct(长pid){
返回产品。获取(pid);
}
//添加产品
公共产品添加产品(产品){
product.setPid(products.size()+1);
products.put(product.getPid(),product);
退货产品;
}
//更新产品
公共产品更新产品(产品产品){

如果(product.getPid(),您可以迭代映射中的一组值,并进行筛选以返回匹配产品的列表:

public List<Product> getProductByCategory(String category) {

    if(products.size() == 0){
        return new ArrayList<>();
    }

    return this.products.values().stream()
       .filter(product -> product.getCategory().equals(category))
       .collect(Collectors.toList());
}
公共列表getProductByCategory(字符串类别){
if(products.size()==0){
返回新的ArrayList();
}
返回此.products.values().stream()
.filter(产品->产品.getCategory().equals(类别))
.collect(Collectors.toList());
}
您还可以使用for循环:

public List<Product> getProductByCategory(String category) {

    List<Product> ret = new ArrayList<>();

    if(products.size() == 0){
        return ret;
    }

    for(Product p: this.products.values()) {
        if(p.getCategory().equals(category))
            ret.add(p);
    }

    return ret;
}
公共列表getProductByCategory(字符串类别){
List ret=new ArrayList();
if(products.size()==0){
返回ret;
}
对于(产品p:this.products.values()){
if(p.getCategory().equals(category))
ret.add(p);
}
返回ret;
}

请注意,如果产品映射为空,我将返回一个空的
ArrayList
。对于集合返回类型,这是更好的做法(而不是返回
null

一种方法是按如下所示迭代Hashmap:

public List<Product> getProductsBasedOnCategory(String category)
{
    List<Product> list = new ArrayList<Product>();

    if (products.size()<=0) {
        return list;
    }

    products.entrySet().stream().forEach((entry) -> {
        if (((Product) entry.getValue()).getCategory().equals(category)) {
            list.add(entry.getValue())
        }
    });

    return list;

}
公共列表getProductsBasedOnCategory(字符串类别)
{
列表=新的ArrayList();
if(products.size(){
如果(((产品)条目.getValue()).getCategory().equals(类别)){
list.add(entry.getValue())
}
});
退货清单;
}

您至少有两个选项,例如

  • 为要搜索的每个字段指定一个特定的映射。这是 如果你有很多的对象,在一个 当遍历整个集合时,map取O(1) O(N)
  • 申报地图

    private Map<Long, Product> productsByID = new HashMap();
    private Map<String, Product> productsByCategory = new HashMap();
    
    public ProductDaoImpl()
    {
        // Create the objects
        Product p1 = new Product(1L,"TV","Entertinement",10000F,250L,"This is best TV!");
        Product p2 = new Product(2L,"Computer","Technology",20000F,350L,"My Computer name Hp and SONY ViVo!");
        Product p3 = new Product(3L,"DeskTopComputer","Technology",15000F,150L,"My Desktop Computer name Accer and SONY ViVo!");
    
        //Assign the objects into the map by ids
        productsByID.put(1L, p1);
        productsByID.put(2L, p2);
        productsByID.put(3L, p3);
    
        //Assign the objects into the map by category
        productsByCategory.put(p1.getCategory(), p1);
        productsByCategory.put(p2.getCategory(), p2);
        productsByCategory.put(p3.getCategory(), p3);
    }
    
  • 使用和你一样的地图,而且很漂亮 正如其他答案所解释的那样,对所有值进行多次迭代
  • 最后,我不知道这是否只是一个练习代码,您的值很少,在这种情况下,性能并不重要,或者这是生产代码的开始,在这种情况下,您希望获得很多值。
    如果最新值为true,则可能需要将其建模为DB(sql或非sql)并按所需的特定字段进行查询。

    for循环中的u应标记this.products.values()。然后就可以了。请更正。无论如何,谢谢。@VeerendarCharyMunigadapa当然可以。编辑,谢谢。嗨@Veerendar,在合并解决方案后,你能放置此代码的工作版本吗?我是新手,正在学习这种类型的项目。浏览/打印getAl返回的ArrayList对我很有帮助lProducts()方法。
    public ProductDaoImpl()
    {
        // Create the objects
        Product p1 = new Product(1L,"TV","Entertinement",10000F,250L,"This is best TV!");
        Product p2 = new Product(2L,"Computer","Technology",20000F,350L,"My Computer name Hp and SONY ViVo!");
        Product p3 = new Product(3L,"DeskTopComputer","Technology",15000F,150L,"My Desktop Computer name Accer and SONY ViVo!");
    
        //Assign the objects into the map by ids
        productsByID.put(1L, p1);
        productsByID.put(2L, p2);
        productsByID.put(3L, p3);
    
        //Assign the objects into the map by category
        productsByCategory.put(p1.getCategory(), p1);
        productsByCategory.put(p2.getCategory(), p2);
        productsByCategory.put(p3.getCategory(), p3);
    }