java - 如何遍历哈希图以获取每四个键值对?
问题描述
我有一个这样的哈希图;
key value1
key value2
key value3
key value4
key1 value5
key1 value6
key1 value7
key1 value8
key2 value9
... and so on
现在我想把它放在一个包含四行的 ListView 中,在 row1 中,我想要:
key value1
key1 value5
key2 value9
key3 value13 and so on till end
在第 2 行,我想要:
key value2
key1 value6
key2 value10
key3 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);
谢谢。
解决方案
而不是使用 HashMap 使用 Multimap。并根据 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));
}
现在你有一组四行列表。这个 Multimap 使用的是 google guava。所以你需要在你的gradle中实现guava,如下所示: implementation 'com.google.guava:guava:26.0-jre'
推荐阅读
- ssl - 在 godaddy、heroku 和 cloudflare 中使用 HTTPS 的问题
- python - Python - 在特定键盘按键后执行操作
- javascript - 在 Objectid 引用数组中查找项目
- postgresql - 使用“0”参数调用“ExecuteReader”的异常:“错误 [57014]
- firebase - 如何在 FCM 中获取多个发件人 ID?
- html - 在内联块容器中添加内容时出现问题
- android - 如何启动 Youtube 应用程序以打开播放列表?
- c - 将指向 uint16_t 的指针传递给需要 C 中 uint8_t[] 数组的子例程 - 如何?
- c# - 无法将 C++ 中的 std::string 函数的结果获取到 C# 互操作
- node.js - Can you run multiple tests in one browser context Playwright Javascript?