【问题标题】:Iterate through ArrayList of objects, and return the object遍历对象的ArrayList,并返回对象
【发布时间】:2018-08-04 09:58:38
【问题描述】:

我想遍历对象的 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语句......

假设每种颜色总是有一辆汽车。所以我一直在寻找一辆车,不多也不少。

如何确保始终找到一个对象并返回它?

【问题讨论】:

  • 如果应该始终存在匹配项,那么在 she 方法结束时抛出异常来表示错误将起作用。
  • 感谢所有回答!现在它工作正常,我只能接受一个答案,但它们都帮助我更好地理解它:)

标签: java object arraylist return


【解决方案1】:

初始化要在循环外返回的 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"));

【讨论】:

  • 太棒了!投票赞成...(顺便说一句,可以捕获异常)
  • +++ for streams 您的列表也可能包含具有该颜色的汽车列表,在这种情况下使用 .collect(Collectors.toList());
  • @Evilguy,是的,是的。但我想保留 OP 所拥有的(返回第一个找到的对象)。
【解决方案2】:

假设每种颜色总是有一辆汽车。所以我一直在寻找一辆车,不多也不少。

这是一个奇怪的假设。但是如果是这样,那么除了最后需要抛出异常之外,您所拥有的一切都很好:

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

【讨论】:

  • 优秀且解释清楚。
猜你喜欢
  • 1970-01-01
  • 2015-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
相关资源
最近更新 更多