Java迭代列表并添加到包含列表的对象

时间:2015-04-24 12:40:52

标签: java

我有几个对象说:Car,Auto和AutoCar

Car
- String name;
- String origin;

Auto
- String type;

AutoCar
-   String type;
-   List<Car> cars = new ArrayList<Car>();

迭代汽车列表:

List<Car> carList = //fetched from a service or method
List<AutoCar> acList = new ArrayList<AutoCar>();

for(Auto auto : autos){
    AutoCar ac = new AutoCar();
    ac.setType(auto.getType());
    ac.setCars(carList);
    acList.add(ac);
}

我希望结果:

Type = CAR-Type-1
Cars:
name: FORD
origin: US
name: Suzuki
origin: Japan

Type = CAR-Type-2
Cars:
name: Volkswagen
origin: Germany
name: Audi
origin: Germany

Type = CAR-Type-3
Cars:
name: Jaguar
origin: UK
name: Ferrari
origin: Italy

但我得到的是保留的最后一次迭代...

Cars:
name: Jaguar
origin: UK
name: Ferrari
origin: Italy

所有车型(CAR-Type-1 / CAR-Type-2 / CAR-Type-3)

我认为我在这一行上做错了:

ac.setCars(carList);

如果我不清楚,请告诉我。

3 个答案:

答案 0 :(得分:1)

您需要为每个汽车创建一个新的carList,如果您重复使用相同的汽车将拥有相同的汽车列表。

答案 1 :(得分:0)

您只提取carList一次并在迭代中设置相同的carList。每次根据车型提取carList,然后相应地设置。

答案 2 :(得分:0)

您需要为每carList填写auto。 这意味着您的服务/方法需要接受type参数,该参数返回Car的所有type个对象,您必须在autos内的循环内调用它。

for (Auto auto : autos) {
  AutoCar ac = new AutoCar();
  ac.setType(auto.getType());
  ac.setCars(carService.getCarsByType(auto.getType())); //<-- your service/method call here
  acList.add(ac);
}