如何将类的ArrayList转换为HashMap



我想将ArrayLists更改为HashMaps。下面是我的代码,它获取一个食物并返回其价格。我有一个餐馆的排列列表,菜单列表。Restaurant类包含一个菜单,目前也是一个ArrayList。我想查找foodItem字符串,该字符串可以在任何餐厅中(并且存在并且是该餐厅唯一的(。我认为菜单最好是一个HashMap,包含menu类型的HashMap菜单会是什么样子?我最好也存储Restaurant's的HashMap,而不是ArrayList吗?那么我的查找结果会有什么不同?

餐厅类别:

public class Restaurant {
String name;
String location;
ArrayList<Menu> menu;
public int getCost(String foodItem) {
for (Menu item : menu) {
if (item.item.equals(foodItem)) {
return item.pence;
}
}
return 0;
}
}

菜单类:

public class Menu {
String item;
int cost;
}

其他地方返还成本的方法:

for (Restaurant i : menuList) {  
for (Menu items : i.menu) { 
if (Objects.equals(items.item, foodItem))
cost += i.getCost(foodItem);
}
}

重构"菜单";类到";项目";类并生成getter和setter;

public class Item {
String name;
int cost;   
}

所以你的";餐厅"类,不需要声明getCost((和声明:

ArrayList<Item> menu;

更有意义的是,因为菜单是一个项目列表,你只需要调用:

for (Item item : menu) { 
if (Objects.equals(item.getName(), foodItem))
cost += item.getCost();
}

根据将Menu重命名为更清晰的Item的建议,它可能看起来像这样:

public class Restaurant {
String name;
String location;
Map<String, Item> menu = new HashMap<>();
public Collection<Item> getMenu() {
menu.values();
}
public int getCost(String foodItem) {
Item item = menu.get(food item);
return item == null ? 0 : item.getCost();
}
}

你应该为你的List<Restaurant>做同样的事情吗?这取决于情况。如果你只是用它来找餐厅,是的,但通常你更喜欢ListSet而不是Map。现在菜单的唯一目的是用来搜索一个项目,而你正在设计你的类只是为了这个目的。如果您曾经需要相同的类来处理其他内容,那么您现在有了一个Map,它专门用于使用键进行搜索,但例如,它并没有针对遍历每个菜单项进行优化。

最新更新