2016-08-02 59 views
1

我有一個屬性爲ManufacturerModel的汽車類。一個Manufacturer可以有很多Model,例如製造商Chevrolet有機型如CamaroMalibu ......我創建一個ArrayList來存儲它們,像這樣:Java - 從ArrayList中分離和顯示元素像列表中的子列表

Cars objCar; 
ArrayList<Cars> arrListCars; 

objCar = new Cars("Chevrolet","Camaro"); 
arrListCars.add(objCar); 
objCar = new Cars("Chevrolet","Malibu"); 
arrListCars.add(objCar); 
objCar = new Cars("Ford","Mustang"); 
arrListCars.add(objCar); 
objCar = new Cars("Ford","Fiesta"); 
arrListCars.add(objCar); 

我可以像打印和顯示一個列表:

Manufacturer: Chevrolet | Model: Camaro 
Manufacturer: Chevrolet | Model: Malibu 
Manufacturer: Ford | Model: Mustang 
Manufacturer: Ford | Model: Fiesta 

但我要顯示這樣的事情:

Manufacturer: Chevrolet | Model: Camaro Malibu 
Manufacturer: Ford | Model: Mustang Fiesta 

我在汽車類中有getter setter。

請幫幫忙,我是新來的Java,真不知道如何挑選出元素一樣,得益於

+0

對不起,但這是循環的微不足道。你應該可以自己做一些Google搜索。不要懶得學東西:) – Dici

+0

我知道它需要使用循環,但我不知道模型如何分離,但仍然是相同的製造。我可以拿出製造商沒有重複使用列表,但2元素在同一時間,我很卡... –

+0

您的預期輸出不夠完整,編輯更清晰。現在對初學者來說這不是小事 – Dici

回答

0

所以,你可以做到這一點的一種方式是使用干將。我假設在你的Cars類中你可能有變量Manufacturer和Model。字符串。因此,我認爲它是

private String manufacturer; 
private String model 

public Cars(String manufacturer, String model) { 
this.manufacturer = manu; 
this.model = model; 
} 

現在,在該類中,您可以創建getters。

public String getManufacturer() { 
return manufacturer; 
} 

public String getModel() { 
return model; 
} 

所以現在你可以訪問你的內部數據變量。

內部主代碼,您已將汽車到列表中後,你可以訪問它們(並打印的格式,你要如下:

for(Car cars: arrListCars) { 
System.out.println("Manufacturer: " + cars.getManufacturer() + "| Model: " + cars.getModel()); 
} 

上面的循環是一個的for-each 。舉例另一種使用for循環,在一個更傳統的方式,你可能熟悉的就是編入索引的循環例:

for(int i = 0; i < arrListCars.size(); i++) { 
System.out.println("Manufacturer: " + arrListCars.get(i).getManufacturer() + "| Model: " + arrListCars.get(i).getModel()); 
} 

編輯

我明白了,所以你想讓它統一起來。好的,爲此您需要使用地圖。地圖的快速說明。將對象鍵映射到對象值,通常在IDE中顯示爲Map(比如Eclipse)。因此,在您的代碼中,您需要將這些值添加到Map中。

例:

地圖carMap =新的HashMap <>();

carMap.put(「Ford」,「Mustang」); carMap.put(「雪佛蘭」浩「);

那麼你的代碼中,你可以創建一個字符串中間例:

String chevyManu = "Manufacturer: Chevrolet | "; 
String fordManu = "Manufacturer: Ford | "; 

for (String key : carMap.keySet()) { 
    if(key.equalsIgnoreCase("Ford") { 
     fordManu += carMap.get(key); 
    } 
    else if(key.equalsIgnoreCase("Chevrolet") { 
      chevyManu += carMap.get(key); 
    } 
} 

我不得不尋找如何遍歷一個地圖,我用http://javarevisited.blogspot.com/2011/12/how-to-traverse-or-loop-hashmap-in-java.html作爲源頭。

EDIT 2

過它的思考,我覺得你其實可以儘量避免使用地圖爲好。我們仍然會使用兩個字符串(chevyManu和fordManu)的概念,並首先將它們初始化爲「製造商:Chevrolet或Ford |」,然後在循環數組的代碼中,我們可以創建一些基本的if語句。

例:這裏

for(Car cars: arrListCars) { 
if(cars.getManufacturer().equalsIgnoreCase("Chevrolet") { 
chevyManu += cars.getModel() + " "; 
} 
else if(cars.getManufacturer().equalsIgnoreCase("Ford") { 
fordManu += cars.getModel() + " "; 
} 
} 

想法是利用你已經擁有的,儘量避免增加複雜性。我希望這有助於:)

+0

在我看來,在這種情況下沒有必要回答。 Google的一分鐘就會馬上告訴他答案。 – Dici

+0

可能是這樣,但我認爲向他展示一個for-each循環 - 初學者可能不知道的是有效的。此外,我正在考慮添加另一個編輯,以向他展示如何通過將變量公開給變量公開 – SomeStudent

+0

以避免使用getter。這樣,每條線都重複相同的製造商。但是在這種情況下,我想用一個製造商和所有的型號在同一行中顯示這個列表,例如:製造商:Ford |模型:野馬,嘉年華,還有更多... –

0

我有一些未經測試的代碼,這可能有助於:

public void getAllCarsWithManufacturer(String manufacturer, List<Cars> cars, List<Cars> out){ 
    for (Cars car : cars){ 
     // make sure manufacturer matches the one that we need 
     if (car.getManufacturer().equals(manufacturer)){ 
      // add car to output list 
      out.add(car); 
     } 
    } 
} 

public void printOutAllCarsWithManufacturer(String manufacturer, List<Cars> library, List<Cars> out){ 
    // empty the list we are using to output the info 
    out.clear(); 
    // fill the out with the correct manufacturer 
    getAllCarsWithManufacturer(manufacturer, library, out); 
    // print out the data 
    System.out.println("manufacturer: "+manufacturer + " | " + out.toString()); 
} 

public void printOutAllCars(List<Cars> cars){ 
    // sets cant have duplicates 
    HashSet<String> nodupcars = new HashSet<String>(); 
    List<Cars> out = new ArrayList<Cars>(); 
    // use the nodupcars to watch manufacturers 
    for (Cars car : cars){ 
     nodupcars.add(car.getManufacturer()); 
    } 
    for (String car : nodupcars){ 
     printOutAllCarsWithManufacturer(car, cars, out); 
    } 
} 

你會使用printOutAllCars()顯示根據製造商的所有汽車。這也假設Cars有某種getManufacturer()方法來檢索製造商。

+0

我會嘗試一下,仍然搞清楚這是什麼意思,但是謝謝你! –

+0

@TriLuong如果有效,請務必將其標記爲正確答案。 – Arthur

+0

這是一個複雜的方法,以及效率低下。另外,累加器(你的out變量)在Java中是反模式,你更喜歡返回結果而不是修改你的參數 – Dici