簡體   English   中英

迭代對象的ArrayList,並返回該對象

[英]Iterate through ArrayList of objects, and return the object

我想迭代對象的ArrayList,然后我想返回具有特定屬性的對象。

我試過這個:

public Car findCar(String wantedColor){
    for (Car car : carList){
        if (wantedColor.equals(car.getColor())){
            return car;
        }
    }
    // Can't put return statement here because it's dependent of if statement
}

這不起作用,因為return語句在'if語句'中。 但是我不能把return語句放在指定的行中,因為它依賴於if語句......

假設每種顏色總有一輛車。 所以總有一輛車我正在尋找,不多也不少。

如何確保始終找到一個對象並將其返回?

初始化要在循環外返回的Car對象。

Car carWithWantedColor = null;
for (Car car : carList){
    if (wantedColor.equals(car.getColor())){
        carWithWantedColor =  car;
        break;
    }
}
return carWithWantedColor;

但如果它與你所說的相矛盾,並且如果傳遞了不存在的顏色,則返回null 通常應該避免IMO這類事情。

在這種情況下,我更願意使用Optional

如果要終止異常,請執行以下操作

carList.stream()
       .filter(car -> car.getColor().equals(wantedColor))
       .findFirst()
       .orElseThrow(() -> new RuntimeException("Invalid color"));

假設每種顏色總有一輛車。 所以總有一輛車我正在尋找,不多也不少。

這是一個奇怪的假設。 但如果是這樣,那么除了你需要在結尾處拋出異常之外,你所擁有的是好的:

public Car findCar(String wantedColor){
    for (Car car : carList){
        if (wantedColor.equals(car.getColor())){
            return car;
        }
    }
    throw new RelevantException();
}

IllegalStateException可能是合適的。)

更常見的做法是假設將找到汽車,並且當沒有找到時,讓方法返回null (當然記錄它):

public Car findCar(String wantedColor){
    for (Car car : carList){
        if (wantedColor.equals(car.getColor())){
            return car;
        }
    }
    return null;
}

暫無
暫無

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

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