迭代java中的hashmap列表

时间:2013-01-04 11:45:52

标签: java list hashmap

我在hashmap中有一个hashmap,如

List<Map> mapList = new ArrayList<Map>();
    for (int i = 0; i < 2; i++) {
        Map iMap = new HashMap();
        iMap.put("Comment", "");
        iMap.put("Start", "0");
        iMap.put("Max", "0");
        iMap.put("Min", "0");
        iMap.put("Price", "5000.00");
        iMap.put("DetailsID", "51");    
        mapList.add(iMap);
    }

    Map mMap = new HashMap();
    mMap.put("ID", "27");
    mMap.put("ParticipantID", "2");
    mMap.put("ItemDetails", mapList);

我想迭代这个地图并为我做的JSONObject

try {

    JSONObject object = new JSONObject();

    Iterator iterator = mMap.entrySet().iterator();     

    while (iterator.hasNext()) {
        Map.Entry mEntry = (Map.Entry) iterator.next();
        String key = mEntry.getKey().toString();            
        String value = mEntry.getValue().toString();
        object.put(key, value);

    }

    Log.v(TAG, "Object : " + object);

响应就像

Object : {"ItemDetails":"[{Price=5000.00, Comment=, DetailsID=51, Min=0, Max=0, StartViolation=0}, {Price=5000.00, Comment=, DetailsID=51, Min=0, Max=0, StartViolation=0}]","ID":"27","ParticipantID":"2"}

hashmap的内部列表不是迭代

3 个答案:

答案 0 :(得分:4)

  

hashmap的内部列表不是迭代

事实上。您还没有编写任何代码迭代它。当您获得ItemDetails条目时,您将拥有"ItemDetails"的密钥和一个列表值。以下是您正在做的事情:

String key = mEntry.getKey().toString();            
String value = mEntry.getValue().toString();

所以你只是在列表中调用toString()。你需要弄清楚你真正想做的事情。例如,您可能需要:

if (mEntry.getValue() instanceof List) {
    // Handle lists here, possibly recursively
}

请注意,您可能想要递归到每个Map。同样,您需要编写代码来执行此操作。基本上,你不能假设toString()会做你需要的,这是你现在正在做的假设。

答案 1 :(得分:2)

尝试这样做:

Set<Map.Entry<String, String>> entrySet = JSONObject.entrySet();
for (Entry entry : entrySet) {
    // your code
}

答案 2 :(得分:1)

for (Map.Entry<String, String> entry : JSONObject.entrySet()) {
    // ...
}