2017-03-14 72 views
-1

我已经创建了哈希映射的ArrayList,并且知道如何获取列表中所有哈希映射的所有键和值,但是之后我决定使其变得复杂并且迭代通过ArrayList并只获取​​特定的HashMap值(基于键)。我不知道该怎么做。如何从哈希映射的ArrayList中获取特定值

如何修改printArrayList方法从所有hashmaps中仅获取idsku值?

现在我有下面的例子:

public class HashmapArraylist { 

public static void main(String[] args) throws Exception { 

    Map<String, Object> map1 = new HashMap<>(); 
    map1.put("id", 1); 
    map1.put("sku", "test1"); 
    map1.put("quantity", 1); 

    Map<String, Object> map2 = new HashMap<>(); 
    map2.put("id", 2); 
    map2.put("sku", "test2"); 
    map2.put("quantity", 2); 

    Map<String, Object> map3 = new HashMap<>(); 
    map3.put("id", 3); 
    map3.put("sku", "test3"); 
    map3.put("quantity", 3); 

    ArrayList<Map<String, Object>> arrayList = new ArrayList<>(); 
    arrayList.add(map1); 
    arrayList.add(map2); 
    arrayList.add(map3); 

    printArrayList(arrayList); 
} 

public static void printArrayList(ArrayList<Map<String, Object>> arrayList) { 

    for (Map<String, Object> entry : arrayList) { 
     for (String key : entry.keySet()) { 
      String value = entry.get(key).toString(); 
      System.out.println(key + " : " + value); 
     } 
     System.out.println("-----------"); 
    } 
} 
} 
+1

欢迎堆栈溢出!看起来你可能会问作业帮助。虽然我们本身没有任何问题,但请观察这些[应做和不应该](http://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions/338845#338845),并相应地编辑您的问题。 (即使这不是作业,也请考虑建议。) –

+0

不,这不是作业,因为我正在尝试自己学习Java。 (我什至没有同事来帮助这:))。 我会尝试编辑它。 –

回答

1

您的ArrayList的迭代器是正确的。要从地图检索值,只需将该键提供到条目的“get”功能即可。由于您的地图具有“对象”值的“字符串”键,因此您可以使用其上的“toString()”来从您的键返回的对象中获取字符串。

public static void printArrayList(ArrayList<Map<String, Object>> arrayList) { 

    for (Map<String, Object> entry : arrayList) { 
     String myID = entry.get("id").toString(); 
     String mySKU = entry.get("sku").toString(); 
     System.out.print("id:" + myID + " sku: " + mySKU); 
     System.out.println("-------------------"); 
    } 
} 
0

user681574似乎已经回答了你的问题,但我会再补充一个Java8示例代码做同样的事情,因为你需要,使用流

public static void printArrayList(ArrayList<Map<String, Object>> arrayList) { 
    arrayList.stream() //stream out of arraylist 
     .forEach(map -> map.entrySet().stream() //iterate through each map in the list, create stream out of maps' entryset 
      .filter(entry -> entry.getKey().equals("id") || entry.getKey().equals("sku")) //filter out only entries that we need (where key is "id" or "sku") 
      .forEach(idOrSku -> System.out.println(idOrSku.getKey() + ":" + idOrSku.getValue()))); //Iterate through the id/sku entries and print them out just as we want to 
} 
相关问题