【问题标题】:Convert HashMap of HashMap into ArrayList of ArrayList将HashMap的HashMap转换为ArrayList的ArrayList
【发布时间】:2017-08-14 21:02:01
【问题描述】:

我知道将HashMap转换成List可以通过List<String> list = new ArrayList<>(hashMap.values());完成,但是HashMap的HashMap呢?

赞:HashMap<String, HashMap<String, String>>,如何转换成ArrayList<ArrayList<String>>?

到目前为止,我的想法是 List<List<String>> list = new ArrayList(hashMap.values());,但是如何将内部 HashMap 转换为列表,有/没有迭代它?

【问题讨论】:

    标签: java android list arraylist hashmap


    【解决方案1】:
    map.values().stream()  // a stream of Map<String, String>
        .map(innerMap -> new ArrayList<>(innerMap.values())  // a stream of List<String>
        .collect(Collectors.toList());  // List of List<String>
    

    当然,您会丢失所有关键信息。

    【讨论】:

    • innerMap 来自哪里?没有包含内部映射值的变量不是吗?
    • innerMap -&gt; new ArrayList&lt;&gt;(innerMap.values()) 是一个 Lambda,你可以给定义中的变量任何名字,你可以在函数部分使用它。 x -&gt; new ArrayList&lt;&gt;(x.values()) 也可以,但可读性较差。但是,这取决于您是否可以使用 Java 8,这取决于您正在开发的 Android API 版本。
    【解决方案2】:

    对于非 java 8 你可以使用

    1.) 从您的 hashMapOfMaps 获取条目集

    2.) hashMapOfMaps.getValue() 将 retrun HashMap&lt;String, String&gt; 然后 .values() 返回内部映射的 String 值

        for (Entry<String, HashMap<String, String>> entry:  hashMapOfMaps.entrySet()) {
            listOfLists.add(new ArrayList<String>(entry.getValue().values()));
        }                                                 |            |
                                                       inner-Map       |
                                                                       |
                                                          inner-Map's string values
    

    【讨论】:

      【解决方案3】:

      由于您希望在 android 上使用此功能,因此您可能不想使用 Java 8 流。这里是 JDK 7

      HashMap<String, HashMap<String, String>> mapOpfMap = new HashMap<>();
      List<List<String>> listOfList = new ArrayList<>();
      
      Iterator<Map.Entry<String, HashMap<String, String>>> it = mapOpfMap.entrySet().iterator();
          while(it.hasNext()){
              Map.Entry<String, HashMap<String, String>> value = it.next();
              value.getKey(); // here is the key if you need it
              listOfList.add(new ArrayList<>(value.getValue().values()));
          }
      

      【讨论】:

        猜你喜欢
        • 2012-06-02
        • 1970-01-01
        • 1970-01-01
        • 2011-12-09
        • 1970-01-01
        • 2017-07-05
        • 2020-07-09
        • 2011-07-24
        • 1970-01-01
        相关资源
        最近更新 更多