Java 有没有更好的方法从数组中获取值?
我已经指定了值Java 有没有更好的方法从数组中获取值?,java,Java,我已经指定了值 Menu[] food = {new Menu ("A01", "Burger", 10.00), ...} Menu[] drinks = {...} 主要功能 当我想从两个数组的另一个函数中获取price值作为用户输入ID时,我使用two for loop来获取price for (int i = 0; i < food.length; i++){ do{ if(food[i].getMenuID().equals(id)){
Menu[] food = {new Menu ("A01", "Burger", 10.00), ...}
Menu[] drinks = {...}
主要功能
当我想从两个数组的另一个函数中获取price值作为用户输入ID时,我使用two for loop来获取price
for (int i = 0; i < food.length; i++){
do{
if(food[i].getMenuID().equals(id)){
//codes
}
}while(!food[i].getMenuID().equals(id));
}
for (int i = 0; i < drinks.length; i++){
do{
if(drinks[i].getMenuID().equals(id)){
//codes
}
}while(!drinks[i].getMenuID().equals(id));
}
for(int i=0;i
我能知道有什么更好的方法来获得价格值吗?虽然
循环毫无用处,但只需使用一个循环即可
String id = "A01";
Menu toFind = null;
for (int i = 0; i < food.length; i++){
if(food[i].getMenuID().equals(id)){
toFind = food[i];
System.out.println("Got it !");
break;
}
}
您还可以使用(如果您使用java 1.8+):
考虑到您希望通过菜单项的键获取价格,最好使用哈希映射(map.of(…)来自Java 9):
Map饮料=Map.of(“A01”,新菜单(“可乐”,10.00),
“A02”,新菜单(“芬达”,11.00);
手动菜单=饮料。获取(“A01”)
如果您不喜欢使用映射的方法,也可以使用streams API(Java 8+):
Menu[] food = {new Menu ("A01", "Burger", 10.00), ...}
String menuIdToSearchFor = "A01";
Optional<Menu> optionalMenu = Arrays.stream(food)
.filter(menu -> menuIdToSearchFor.equals(menu.getMenuId())
.findFirst()
.orElse(...);
Menu[]food={新菜单(“A01”,“汉堡”,10.00),…}
字符串menuIdToSearchFor=“A01”;
可选选项菜单=数组。流(食物)
.filter(menu->menuIdToSearchFor.equals(menu.getMenuId())
.findFirst()
.orElse(…);
尝试一个哈希映射?或者甚至一个哈希集,假设您没有两个具有相同ID的菜单项。当然,然后您需要覆盖hashCode
和equals
。您使用的是什么版本的Java?Java 1.8+有流。您可以应用过滤器和映射,以更简单的方式进行操作。您还可以合并流。(或者,如果饮料包含相同的菜单结构,那么你的数组。问题不清楚)关于你的类设计的一个小说明:我不认为Menu
是一个汉堡的好名字。MenuItem
可能更好,比如“菜单上的一个项目”。你的数组可能不应该按食物和饮料来划分,我的意思是,如何处理Cafe Gourmet(当然,除了点菜和吃/喝它)。Streams出现在Java 1.8中。根据我在你发布之前的评论!@JGFMK你是对的。我已经为“Map.of()”添加了Java 9+标题我已经更正了答案,表示第二种方法也适用于Java1.8。谢谢。
String id = "A01"
Menu myMenu = Arrays.asList(food)
.stream()
.filter(menu -> menu.id.equals(id))
.findAny()
.orElse(null);
Map<String, Menu> drinks = Map.of("A01", new Menu ("Cola", 10.00),
"A02", new Menu ("Fanta", 11.00));
Manu menu = drinks.get("A01")
Menu[] food = {new Menu ("A01", "Burger", 10.00), ...}
String menuIdToSearchFor = "A01";
Optional<Menu> optionalMenu = Arrays.stream(food)
.filter(menu -> menuIdToSearchFor.equals(menu.getMenuId())
.findFirst()
.orElse(...);