代码之家  ›  专栏  ›  技术社区  ›  Zac

如何遍历hashmap以获得每四个键、值对?

  •  1
  • Zac  · 技术社区  · 7 年前

    我有一个这样的hashmap;

    key value1
    key value2
    key value3
    key value4
    key1 value5
    key1 value6
    key1 value7
    key1 value8
    key2 value9
    ... and so on
    

    现在我想把它放到一个包含 四排 ,在第1行中,我要:

    key value1
    key1 value5
    key2 value9
    key3 value13 and so on till end
    

    在第二排,我想:

    key value2
    key1 value6
    key2 value10
    key3 value14 and so on till end
    

    第三行和第四行也是一样。总是只有4行。

    我很难重复这个。这是我写的代码,但不起作用。

    String[] fourrows = hashMap.get("KEY");
    for (int i=0;i<fourrows.length;i++) {
    HashMap<String, String> listHashMap = new HashMap<>();
    listHashMap.put("TA",  "ROW VALUE "+fourrows[i]);
    
    for (int j=1;j<hashMap.entrySet().size();j+=4) {
    String val = hashMap.values().toArray()[j].toString();
    String key = hashMap.get(hashMap.keySet().toArray()[0]).toString();
    
    listHashMap.put("IA", key);
    listHashMap.put("XA", val);
    incmStmtList.add(listHashMap);
    }
    }
    
    //Then I pass TA, IA and XA to a simple list adapter and add it to a listView.
    incmAdapter = new SimpleAdapter(getContext(), incmStmtList,R.layout.content_results, new String[]{"TA", "IA", "XA"},new int[]{R.id.ta, R.id.ia, R.id.tota});
    listView.setVerticalScrollBarEnabled(true);
    listView.setAdapter(incmAdapter);
    

    谢谢。

    2 回复  |  直到 7 年前
        1
  •  0
  •   kumud kala    7 年前

    使用Multimap代替HashMap。并基于key获取Collection对象中的值。然后从每个集合在所有列表中添加一个值。

    多重映射myList=ArrayListMultimap.create创建();

                myList.put("key","value1");
                myList.put("key","value2");
                myList.put("key","value3");
                myList.put("key","value4");
                myList.put("key1","value5");
                myList.put("key1","value6");
                myList.put("key1","value7");
                myList.put("key1","value8");
                myList.put("key2","value9");
                myList.put("key2","value10");
                myList.put("key2","value11");
                myList.put("key2","value12");
                myList.put("key3","value13");
                myList.put("key3","value14");
                myList.put("key3","value15");
                myList.put("key3","value16");
    

    然后从列表中获取所有密钥

      Set myKeySet = myList.keySet();
      Object[] keys = myKeySet.toArray();
    

    现在你有一套所有的钥匙。然后

        HashMap<String, String> listHashMap1 = new HashMap<>();
        HashMap<String, String> listHashMap2 = new HashMap<>();
        HashMap<String, String> listHashMap3 = new HashMap<>();
        HashMap<String, String> listHashMap4 = new HashMap<>();
    

    现在将值添加到每个列表中

      for(int i=0;i<4;i++){
            List<String> keyval = (List)myList.get((String)keys[i]);
            listHashMap1.put((String)keys[i],keyval.get(0));
            listHashMap2.put((String)keys[i],keyval.get(1));
            listHashMap3.put((String)keys[i],keyval.get(2));
            listHashMap4.put((String)keys[i],keyval.get(3));
         }
    

    现在您有了一组四行列表。这个多重地图是用谷歌番石榴。 因此,您需要在gradle中实现番石榴,如下所示: “实施”谷歌番石榴:番石榴:26.0-jre'

        2
  •  0
  •   Boris van Katwijk    7 年前

    从你提供的代码看来 hashMap 属于类型 Map<String, String[]> .

    您可以迭代映射的条目,并将每个条目的四个值存储在不同的结果容器中。因为您指出结果容器也应该是映射:

        Map<String, String> one = new HashMap<>();
        Map<String, String> two = new HashMap<>();
        Map<String, String> three = new HashMap<>();
        Map<String, String> four = new HashMap<>();
    
        hashMap.entrySet().forEach(entry -> {
            String[] values = entry.getValue();
            one.put(entry.getKey(), values[0]);
            two.put(entry.getKey(), values[1]);
            three.put(entry.getKey(), values[2]);
            four.put(entry.getKey(), values[3]);
        });
    

    注意:假设每个键总是正好有四个值。