繁体   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