我不明白我的代码中缺少什么

时间:2016-09-01 10:14:54

标签: java collections

import java.util.*;

public class CarProduct{

    String color;
    String modelname; 
    String price;   
    public CarProduct(String c, String m, String p){
        color = c;
        modelname = m;
        price = p;
    }
}

class HashMapApplication{

    public static void main(String []ar){

        ArrayList<CarProduct> arraylist1 = new ArrayList<CarProduct>(); 
        ArrayList<CarProduct> arraylist2 = new ArrayList<CarProduct>(); 
        ArrayList<CarProduct> arraylist3 = new ArrayList<CarProduct>(); 

        HashMap<String,ArrayList> hashmap = new HashMap<String,ArrayList>();

        CarProduct Tata = new CarProduct("black","12 Lakhs","Aria");
        arraylist1.add(Tata);
        hashmap.put("Tata",arraylist1);

        CarProduct WolksWagen = new CarProduct("off white","10 Lakhs","Passat");
        arraylist2.add(WolksWagen);
        hashmap.put("WolksWagen",arraylist2);

        CarProduct Mahindra = new CarProduct("white","15 Lakhs","XUV");
        arraylist3.add(Mahindra);
        hashmap.put("Mahindra",arraylist3);

        //get(int index)
        //map.get(id).add(value);

        //hashmap.get("")   
        // this contains error i dont know how iterate it because the class is there and i need access each and every field in it
        for (Entry<String, ArrayList<CarProduct>> entry : hashmap.entrySet()) {
            System.out.print(entry.getKey()+" | ");
            for(String property : entry.getValue()){
                System.out.print(property+" ");
            }
            System.out.println();
        }   

    }   

}

我想从hashmap中提取值。 请帮忙,给出密钥,值为arraylist。 请帮助转换字符串中的对象并使用get方法显示每个值

2 个答案:

答案 0 :(得分:0)

import java.util.*;

public class CarProduct{

    String color;
    String modelname;
    String price;
    public CarProduct(String c, String m, String p){
        color = c;
        modelname = m;
        price = p;
    }

    @Override
    public String toString()
    {
        return "Model: " + modelname + " Colour:" + color + " Price:" + price ;
    }
}

class HashMapApplication{

    public static void main(String []ar){

        List<CarProduct> arraylist1 = new ArrayList<CarProduct>();
        List<CarProduct> arraylist2 = new ArrayList<CarProduct>();
        List<CarProduct> arraylist3 = new ArrayList<CarProduct>();

        Map<String,List<CarProduct>> hashmap = new HashMap<String, List<CarProduct>>();

        CarProduct Tata = new CarProduct("black","12 Lakhs","Aria");
        arraylist1.add(Tata);
        hashmap.put("Tata",arraylist1);

        CarProduct WolksWagen = new CarProduct("off white","10 Lakhs","Passat");
        arraylist2.add(WolksWagen);
        hashmap.put("WolksWagen",arraylist2);

        CarProduct Mahindra = new CarProduct("white","15 Lakhs","XUV");
        arraylist3.add(Mahindra);
        hashmap.put("Mahindra",arraylist3);

        for (Map.Entry<String, List<CarProduct>> entry : hashmap.entrySet()) {
            System.out.print(entry.getKey()+" | ");
            for(CarProduct property : entry.getValue()){
                System.out.print(property+" ");
            }
            System.out.println();
        }

    }

}

所以要纠正一些事情。

首先是hashmap,我们需要确保正确键入hashmap,因此我们已经指定了ArrayList的类型,否则我们只能获取对象。

其次是for循环。在这里,我们需要更改内部for循环,以便它在CarProduct上循环而不是字符串。

最后,对于打印属性,我们需要覆盖CarProduct中的toString()方法,这将允许您获取汽车产品并将其直接放在System.out.print()中。

我应该补充的一点是,目前您正在以错误的顺序将输入放入初始化程序中。您的构造函数指定颜色,型号,价格,但您使用初始化程序作为颜色,价格,型号。

编辑:使列表和地图更通用,以反映对原始问题的评论

答案 1 :(得分:0)

  for (Map.Entry<String, ArrayList> entry : hashmap.entrySet()) {
                System.out.print(entry.getKey()+" | ");
                //get the arraylist first.
                ArrayList<CarProduct> arrayList = entry.getValue();
            for(CarProduct x: arrayList){
                   //display the carProduct
     }
       System.out.println();
   }

您基本上是在尝试打印ArrayList.toString(),它不会给出正确的响应。尝试先获取arraylist,然后迭代其内容。