2016-08-02 60 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