![](/img/trans.png)
[英]How to iterate through an ArrayList of Objects of ArrayList of Objects?
[英]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.