簡體   English   中英

有沒有更好的方法從數組中獲取值?

[英]Is there any better way to get the value from an array?

我已經賦值了

Menu[] food = {new Menu ("A01", "Burger", 10.00), ...}
Menu[] drinks = {...}

在主函數中

當我想在用戶從兩個數組的另一個函數中輸入ID時獲取價格的值時,我使用兩個for 循環來獲取價格

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));
}

我可以知道有沒有更好的方法來獲得價格價值?

while循環完全沒用,只用一個就可以了

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;
    }
}

使用Streams (java>8)對應的解決方案如下

Menu myMenu = Arrays.asList(food).stream().filter(menu -> menu.id.equals(id))
                                          .findAny().orElse(null);

您還可以使用(如果您使用 java 1.8+ ):

String id = "A01"

Menu myMenu = Arrays.asList(food)
.stream()
.filter(menu -> menu.id.equals(id))
.findAny()
.orElse(null);

考慮到您想通過菜單項的鍵獲取價格,在這種情況下最好使用哈希映射(Map.of(...) 來自 Java 9):

Map<String, Menu> drinks = Map.of("A01", new Menu ("Cola", 10.00),
                          "A02", new Menu ("Fanta", 11.00));
Manu menu = drinks.get("A01")

或者,如果您不喜歡使用地圖的方法,則可以使用流 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(...);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM