我有一个HashMap
myMap = new HashMap<String, ArrayList<String> >();
我正在编写一个代码,我想在ArrayList
中为该密钥添加项目(如果它存在于地图中),
myMap.get(key).add(element);
或创建新的ArrayList
,将项目添加到列表中,然后将此列表添加到地图中。
ArrayList<String> tmpArrList = new ArrayList<>();
tmpArrList.add(element);
myMap.put(key, tmpArrayList);
写三行添加单个元素,对我不好看,我怎么能 使用Java 5将它写成单行 ..?
答案 0 :(得分:2)
如果您使用的是Java 8,则computeIfAbsent
就是您所需要的:
myMap.computeIfAbsent(key, ArrayList::new).add(element);
如果ArrayList
中尚未提供请求的密钥,则会生成新的Map
并将其放入Map
。
答案 1 :(得分:1)
由于您需要 Java 5 的解决方案,您可以做的最好的事情就是简化:
ArrayList<String> tmpArrList = new ArrayList<>();
tmpArrList.add(element);
myMap.put(key, tmpArrayList);
有了这个:
myMap.put(key, new ArrayList<String>(Collections.singletonList(element)));
或者允许在地图中添加条目的代码可以是:
if (!myMap.containsKey(key)) {
myMap.put(key, new ArrayList<String>());
}
myMap.get(key).add(element);
您还可以考虑使用Multimap
中的Google Guava,但请注意,它仅针对 Java 6 表示最新版本,希望现有 {5} 版本13.0
,14.0
,16.0
和17.0
可从here获取,更多详情here。< / p>
以下是如何使用它的示例:
ListMultimap<String, String> myMap = ArrayListMultimap.create();
// This will map the provided key with the provided value whetever the
// total amount of values already mapped with this key
myMap.put(key, element);
答案 2 :(得分:1)
我怎样才能用单行编写..? (来自问题)
我必须写一些支持Java 1.5及以上的东西(来自comment)
你不能。编写它的最短方式是:
string commandArguments = Environment.GetCommandLineArgs();
string arg1 = null;
string arg2 = null;
string arg3 = null;
bool isCmdLineOk = TryGetArg(commandArguments, "-r", out arg1) &&
TryGetArg(commandArguments, "-n", out arg2) &&
TryGetArg(commandArguments, "-p", out arg3);
if (isCmdLineOk)
{
// do something with `arg1`, `arg2`, `arg3`.
}
else
{
// not all of `arg1`, `arg2`, `arg3` could be set to a value.
Console.WriteLine("Parameters structure is inconsistent");
}
这是优化为仅执行一次地图查找,与使用ArrayList<String> list = myMap.get(key);
if (list == null)
myMap.put(key, list = new ArrayList<String>());
list.add(element);
检测是否需要新containsKey()
的实现不同。
除了:
只需将其全部写在一行 * :
ArrayList
*是的,这是一个笑话,虽然从技术上讲是一个有效的答案。
创建辅助方法,例如在共享实用程序类中:
ArrayList<String> list = myMap.get(key); if (list == null) myMap.put(key, list = new ArrayList<String>()); list.add(element);
然后使用它是一行:
public static <K, V> void addToMapList(Map<K, ArrayList<V>> mapList, K key, V value) {
ArrayList<V> list = mapList.get(key);
if (list == null)
mapList.put(key, list = new ArrayList<V>());
list.add(value);
}
使用Apache Commons Collections ™ * 类MultiValueMap
:
MyUtil.addToMapList(myMap, key, element);
*对于Java 5,请使用4.0版。
使用Google Guava * 类ArrayListMultimap
:
MultiMap<String, String> myMap = new MultiValueMap<String, String>();
myMap.put(key, element);
*对于Java 5,请使用version 11.0。
自己编写ListMultimap<String, String> myMap = ArrayListMultimap.create();
myMap.put(key, element);
。