如何将新的单值映射作为参数传递?

时间:2015-11-08 05:18:35

标签: java arrays dictionary

我有一个容器,可以跟踪每个文件的主机,文件和部分:

private static Map<String, Map<String, ArrayList<FileShard>>> globalFileShardMap = new HashMap<String, Map<String, ArrayList<FileShard>>>();

我想在此处添加一个新条目,我这样做:

 // filename and shard are known
 ArrayList<FileShard> initShard = new ArrayList<FileShard>();
 initShard.add(shard);

 Map<String, ArrayList<FileShard>> initMap = new HashMap<String, ArrayList<FileShard>>();
 initMap.put(filename,initShard);

 globalFileShardMap.put(Node.getLocal().getHostname(), initMap);

有没有办法将其压缩为一行,并将新的内部地图作为参数传递给globalFileShardMap.put

2 个答案:

答案 0 :(得分:1)

在线转换将是 -

globalFileShardMap.put(Node.getLocal().getHostname(), new HashMap<String, ArrayList<FileShard>>(){{
     put(filename, new ArrayList<FileShard>(){{add(shard);}});
}});

答案 1 :(得分:1)

这是一种在一行中完成它而不创建任何匿名类的方法。

globalFileShardMap.put(Node.getLocal().getHostname(), 
    new HashMap<>(Collections.singletonMap(filename, 
    new ArrayList<>(Collections.singletonList(shard)))));

这需要Java 7作为钻石<>

如果您实际上不需要HashMapArrayList(即任何旧MapList都可以),您可以摆脱{{1 }和new HashMap<>