如何创建可以扩展其值列表的地图。例如,我有一个地图,其中包含:键A和值B {1,2,3}的列表。然后在程序运行的某个时刻,我想增加更多的值,例如:4到列表B.现在我的新映射应该是这样的:(A,{1,2,3,4})。我怎样才能做到这一点?如何在java中为单个键添加多个值
回答
由于Map<K,V>
映射一个键一个值,你需要V
是List<T>
类型:
Map<String,List<Integer>> multiMap = new HashMap<>();
一个后果是,现在将项目添加到一个关键的过程包括两个步骤:你必须检查是否存在列表为重点,然后再加入新的项目,以现有列表,或添加一个新的列表与单个项目:
List<Integer> current = multiMap.get(key);
if (current == null) {
current = new ArrayList<Integer>();
multiMap.put(key, current);
}
current.add(val);
如果使用Java 8,你可以使用computeIfAbsent
来大大简化代码:
multiMap.computeIfAbsent(key, k -> new ArrayList<>()).add(value);
您可以使用更新的'computeIfAbsent'方法简化实现:'multiMap.computeIfAbsent(key,k - > new ArrayList <>())。add(value);' –
@MalteHartwig Right,Java 8增加了这个方便的选项,大大提高了操作的可读性。谢谢! – dasblinkenlight
@MalteHartwig:哇谢谢!这看起来很棒,而且在Java 8中更专业! – Sonn
这种类型的集合已经实现。看看Multimap from Guava。不要从头开始发明自行车。
希望它有帮助!
使用新的临时变量添加新的整数, 检查这个解释可能的帮助。
Map<String, List<Integer>> map = new HashMap<String, List<Integer>>();
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
map.put("A", list);
map.forEach((key,value)->System.out.print(key + " : "+
value));
List<Integer> newList = (ArrayList<Integer>)map.get("A");
newList.add(4);
System.out.println();
map.put("A", newList);
map.forEach((key,value)->System.out.print(key + " : "+
value));
更通用的解决方案是有一个MultiMap类,其中 提供任何Collection类型作为值,例如, ArrayList: 我几周前在Java-Book中发现了这个。例如:
class MultiMap<K, V>
{
private final Map<K,Collection<V>> map = new HashMap<>();
public Collection<V> get(K key)
{
return map.getOrDefault(key, Collections.<V> emptyList());
}
public void put(K key,V value)
{
map.computeIfAbsent(key, k -> new ArrayList<>()).add(value);
}
}
用途可以是:(映射值是一个字符串的ArrayList)
MultiMap<Integer,String> map = new MultiMap<>();
int id = 34;
System.out.println(map.get(id)); // creates an ArrayList<String> for key 34
map.put(id,"first value for 34");
System.out.println(map.get(id)); // [first value for 34]
map.put(id,"second");
System.out.println(map.get(id)); // [first value for 34, second]
希望这有助于...
- 1. c#dictionary如何为单个键添加多个值?
- 2. 如何在Python中为字典键添加多个值
- 3. 如何在Java Swing中为多个按钮添加多个ActionListeners
- 4. 如何将值一个HashMap中添加值的列表单个键(JAVA)
- 5. Python:为字典键添加多个值
- 6. 在C#字典中为一个键添加多个位图值
- 7. 如何使用Properties类在java中为单个键获取多个值?
- 8. 如何在JAXB中添加多个值?
- 9. 如何在jquery中添加多个值?
- 10. Python - 如何在字典中添加多个键和值
- 11. 如何添加多个值?
- 12. 为字典中的一个键添加多个值?
- 13. 我可以为Firebase中的某个键添加多个值吗?
- 14. 如何在同一个函数中为单个数组添加更多值?
- 15. 从具有多个值的字典键中为单个键分配单个值
- 16. 如何将一组多个值添加到一个键?
- 17. 如何在FireBase的相同键下添加多个值?
- 18. 如何在表单中添加多个对象内容添加值
- 19. 在单个web.xml中添加多个servlet
- 20. 将多个对象作为值添加到字典中的键
- 21. 向c#中的散列表中的单个键添加多个值?
- 22. 如何将多个OldDbParameters值添加到单个OleDbCommand?
- 23. 多维数组 - 添加一个键和值,其中一个键和值匹配
- 24. 用java指向Redis(缓存)中的单个值的多个键
- 25. 如何在单个视图中添加多个模型?
- 26. 如何在单个循环中添加多个textField?
- 27. 将多个数组值添加到单个值中
- 28. 将多个值添加到perl hash中的同一个键
- 29. 将多个值添加到对象中的某个键js
- 30. 如何将多个键值对添加到字典Swift
'map.get( “A”)添加。 (4);' – QBrute