2015-04-24 51 views
0

我有幾個對象說:汽車,汽車,AUTOCAR的Java迭代一個列表,並加入到物體包含列表

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-1型/ CAR-2型/ CAR-3型)

我想我做錯了在這一行:

ac.setCars(carList); 

如果我不清楚,請告訴我。

+0

我不認爲這裏有足夠的信息。進入此循環之前,「carList」是否正確填充?你在其他地方更新嗎?你可以在進入循環之前檢查它的值嗎? –

+0

你想獲得所有相同類型的汽車嗎?還是我誤會你? – sodik

+0

您應該在循環的每次迭代中獲得一個新的'carList';否則,您在所有AutoCars中設置相同的列表 – yvilbe

回答

0

您需要填寫carList爲每auto。 這意味着您的服務/方法需要接受參數type,該參數返回type的所有Car對象,並且您必須在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); 
} 
+0

我接受本答覆。但我實際上在迭代和使用Hibernate中的對象時遇到了這個問題,這更多的是我必須解決的跨國問題。謝謝。 – FakirTrappedInCode

+0

這與您最初提出的問題不同,也許您應該在新問題中提出。 – Stefan

1

您需要爲每個汽車創建一個新的carList,如果您重複使用相同的汽車將具有相同的汽車列表。

0

您只提取carList一次,並在迭代中設置相同的carList。根據車型每次取車carList然後相應設置。

相關問題