Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有更好的方法从数组中获取值?_Java - Fatal编程技术网

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(...);