为了账号安全,请及时绑定邮箱和手机立即绑定

如何遍历哈希图以获取每第四个键值对?

如何遍历哈希图以获取每第四个键值对?

皈依舞 2021-12-30 16:34:08
我有一个这样的哈希图;key value1key value2key value3key value4key1 value5key1 value6key1 value7key1 value8key2 value9... and so on现在我想把它放在一个包含四行的 ListView 中,在 row1 中,我想要:key value1key1 value5key2 value9key3 value13 and so on till end在第 2 行,我想要:key value2key1 value6key2 value10key3 value14 and so on till end然后在第 3 行和第 4 行中也是如此。总是只有 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 回答

?
米脂

TA贡献1836条经验 获得超3个赞

而不是使用 HashMap 使用 Multimap。并基于键获取 Collection 对象中的值。然后从每个 Collection 在所有列表中添加一个值。


Multimap 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));

     }

现在您已经设置了四行列表。这个 Multimap 使用的是谷歌番石榴。所以你需要在你的 gradle 中实现番石榴,如下所示: implementation 'com.google.guava:guava:26.0-jre'


查看完整回答
反对 回复 2021-12-30
?
慕的地10843

TA贡献1785条经验 获得超8个赞

从您提供的代码看来,源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]);

    });

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


查看完整回答
反对 回复 2021-12-30
  • 2 回答
  • 0 关注
  • 191 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号