【问题标题】:How to get specific values from an ArrayList of HashMaps如何从 HashMaps 的 ArrayList 中获取特定值
【发布时间】:2017-03-14 22:22:03
【问题描述】:

我已经创建了一个 HashMap 的 ArrayList,并且我知道如何获取列表中所有 HashMap 的所有键和值,但后来我决定让它变得复杂并遍历 ArrayList 并仅获取特定的 HashMap 值(基于键)。我不知道该怎么做。

如何修改 printArrayList 方法以仅从所有哈希图中获取 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("-----------");
    }
}
}

【问题讨论】:

  • 欢迎来到 Stack Overflow!看起来你可能正在寻求家庭作业帮助。虽然我们对此本身没有任何问题,但请注意这些dos and don'ts,并相应地编辑您的问题。 (即使这不是家庭作业,也请考虑建议。)
  • 不,这不是家庭作业,因为我正在尝试自己学习 Java。 (我什至没有同事可以帮助解决这个问题:))。我会尝试编辑它。

标签: java arraylist hashmap iteration


【解决方案1】:

您的arrayList 迭代器是正确的。要从映射中检索值,只需在条目的“获取”函数中提供键。由于您的地图有一个“对象”值的“字符串”键,因此您可以在其上使用“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("-------------------");
    }
}

【讨论】:

    【解决方案2】:

    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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多