从ArrayList Java中的HashMap键中检索所有值
美好的一天,这让我感到困惑(大脑冻结!),似乎缺少一些东西。 有一个我用HashMap填充的ArrayList。 现在我放入了我的HashMap和arraylist。
Map.put(DATE, value1); Map.put(VALUE, value2); arraylist.put(Map);
由于我正在解析JSON,因此arraylist的大小会增加。 现在我的问题是如何从arraylist中的两个映射键获取值? 我试过这个
if(!list.isEmpty()){ // list is an ArrayList for(int k = 0; k < list.size(); k++){ map = (HashMap)list.get(k); } } Log.d(TAG, "map size is" + map.size()); String [] keys = new String[map.size()]; String [] date_value = new String[map.size()]; String [] value_values = new String[map.size()]; int i = 0; Set entries = map.entrySet(); Iterator iterator = entries.iterator(); while(iterator.hasNext()){ Map.Entry mapping = (Map.Entry)iterator.next(); keys[i] = mapping.getKey().toString(); date_value[i] = map.get(keys[i]); if(keys[i].equals(DATE)){ date_value[i] = map.get(keys[i]); } else if(keys[i].equals(VALUE)){ value_values[i] = map.get(keys[i]); } i++; }
但我似乎无法获得所有的价值观。 Map大小始终返回值2,这只是元素。 如何从ArrayList中的Map键获取所有值? 谢谢
当你已经有工作要做的时候,你为什么要重新发明轮子? Map.keySet()
方法为您提供Map中所有键的Set。
Map map = new HashMap(); for (String key: map.keySet()) { System.out.println("key : " + key); System.out.println("value : " + map.get(key)); }
另外,你的第一个for-loop对我来说很奇怪: –
for(int k = 0; k < list.size(); k++){ map = (HashMap)list.get(k); }
您正在迭代列表,并将每个元素分配给相同的reference - map
,这将覆盖所有以前的值。您将拥有的只是列表中的最后一个映射。
编辑 : -
如果您想要地图的键和值,也可以使用entrySet
。 那对你来说是更好的选择: -
Map map = new HashMap(); for(Entry entry: map.entrySet()) { System.out.println(entry.getKey()); System.out.println(entry.getValue()); }
PS : -
你的代码看起来混乱了我。 我建议,把这些代码放在一边,再考虑一下你的design
。 就目前而言,正如代码所代表的那样,很难理解它试图做什么。
试试这种方式……
我正在考虑HashMap
的键和值类型为String
, HashMap
HashMap hmap = new HashMap(); hmap.put("key1","Val1"); hmap.put("key2","Val2"); ArrayList arList = new ArrayList (); for(Map.Entry map : hmap.entrySet()){ arList.add(map.getValue()); }
把i ++放在循环结束的某个地方。
在上面的代码中,数组的0位置被覆盖,因为i在每个循环中没有递增。
仅供参考:以下是进行冗余搜索:
if(keys[i].equals(DATE)){ date_value[i] = map.get(keys[i]); } else if(keys[i].equals(VALUE)){ value_values[i] = map.get(keys[i]); }
用。。。来代替
if(keys[i].equals(DATE)){ date_value[i] = mapping.getValue(); } else if(keys[i].equals(VALUE)){ value_values[i] = mapping.getValue() }
另一个问题是你使用i
作为value_values
和value_values
。 除非您打算在数组中包含空值,否则这是无效的。
这是非常古老的,但我偶然发现它试图找到一个不同的问题的答案。
我的问题是如何从arraylist中的两个映射键获取值?
for (String key : map.keyset()) { list.add(key + "|" + map.get(key)); }
Map大小始终返回值2,这只是元素
我想你可能会对HashMap
的function感到困惑。 HashMap
仅允许地图中的1对1关系。
例如,如果你有:
String TAG_FOO = "FOO"; String TAG_BAR = "BAR";
并尝试做这样的事情:
ArrayList bars = ArrayList<>("bar","Bar","bAr","baR"); HashMap map = new HashMap<>(); for (String bar : bars) { map.put(TAG_BAR, bar); }
此代码最终将键条目"BAR"
设置为与列表bars
的最终项目相关联。
在您的示例中,您似乎感到困惑的是,只有两个项目,但您只记录了两个键,这使我相信您只是多次覆盖每个键的字段。
假设我的Hashmap的关键数据类型为KeyDataType,值数据类型为ValueDataType
HashMap list;
添加您需要的所有项目。 现在,您可以将所有hashmap键检索到列表。
KeyDataType[] mKeys; mKeys=list.keySet().toArray(new KeyDataType[list.size()]);
那么,现在你得到了数组mkeys []中的所有键
您现在可以通过调用来检索任何值
list.get(mkeys[position]);
用于生成字符串的Java 8解决方案,如“key1:value1,key2:value2”
private static String hashMapToString(HashMap hashMap) { return hashMap.keySet().stream() .map((key) -> key + ": " + hashMap.get(key)) .collect(Collectors.joining(",")); }
并生成一个简单的列表列表
private static List hashMapToList(HashMap hashMap) { return hashMap.keySet().stream() .map((key) -> key + ": " + hashMap.get(key)) .collect(Collectors.toList()); }
List构造函数接受实现Collection接口的任何数据结构,用于构建列表
要将哈希映射中的所有键都添加到列表中:
Map map = new HashMap(); List keys = new ArrayList(map.keySet());
要将哈希映射中的所有值都获取到列表:
Map map = new HashMap(); List values = new ArrayList(map.values());