我有一个容器,可以跟踪每个文件的主机,文件和部分:
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
?
答案 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作为钻石<>
。
如果您实际上不需要HashMap
和ArrayList
(即任何旧Map
和List
都可以),您可以摆脱{{1 }和new HashMap<>
。