3 回答

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超10個(gè)贊
您可以迭代地圖中的一組值,并過(guò)濾以返回匹配產(chǎn)品的列表:
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());
}
您還可以為此使用 for 循環(huán):
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;
}
請(qǐng)注意,ArrayList如果產(chǎn)品地圖為空,我將返回一個(gè)空值。這是集合返回類型的更好做法(而不是返回null)

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊
一種方法是遍歷 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;
}

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超8個(gè)贊
您至少有 2 個(gè)選項(xiàng),例如。
為您要搜索的每個(gè)字段準(zhǔn)備一張?zhí)囟ǖ牡貓D。如果您有很多對(duì)象,這會(huì)更快,因?yàn)樵诘貓D中搜索需要 O(1) 而遍歷整個(gè)集合需要 O(N)。大 O 備忘單
聲明地圖
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);
}
使用您擁有的相同地圖,并按照其他答案的解釋幾乎遍歷所有值。
最后,我不知道這是否只是一個(gè)練習(xí)代碼并且您的值很少,在這種情況下,性能無(wú)關(guān)緊要,或者這是您的生產(chǎn)代碼的開(kāi)始,在這種情況下,您希望得到很多值。如果最新的是真的,可能您想將其建模為數(shù)據(jù)庫(kù)(sql 或非 sql)并按您想要/需要的特定字段進(jìn)行查詢。
添加回答
舉報(bào)