java - 树状图()) 带对象的树形图
问题描述
嗨,我有以下代码
TreeMap mp = new TreeMap<String,TreeMap<String,Integer>();
mp.put(line,(new TreeMap<String,Integer>()));
现在,如果我想将数据插入由“mp”创建的新 EmptyTree<String,Integer>,我该怎么做?
解决方案
有无数种方法可以做到这一点。
首先,您可以简单地保留参考:
var map = new TreeMap<String,Integer>();
mp.put(line, map);
// can du stuff with map now
其次,您可以从地图中读取值 - 显然这不是很有效,但为了完整起见,我会包括它:
mp.put(line,(new TreeMap<String,Integer>()));
var map = mp.get(line);
最优雅的解决方案是使用computeIfAbsent
:
var map = mp.computeIfAbsent(line, line -> new TreeMap<String,Integer>());
// do stuff with map
computeIfAbsent
返回映射中已经存在的值,或者以其他方式评估 lambda 并将其放入映射中,然后返回该值。
来自 JavaDoc:
如果指定的键尚未与值关联(或映射到
null
),则尝试使用给定的映射函数计算其值并将其输入到此映射中,除非null
.如果映射函数返回 null,则不记录映射。如果映射函数本身抛出(未经检查的)异常,则重新抛出异常,并且不记录映射。最常见的用法是构造一个新对象作为初始映射值或记忆结果,如下所示:
map.computeIfAbsent(key, k -> new Value(f(k)));
或者实现一个多值映射,
Map<K,Collection<V>>
每个键支持多个值:
map.computeIfAbsent(key, k -> new HashSet<V>()).add(v);
映射函数不应在计算期间修改此映射
的优点computeIfAbsent
是您不需要检查该值是否已经存在于地图中,并且没有覆盖旧值的危险。
推荐阅读
- python - faktory: error=redis 未启动,无法启动 无法启动命令服务器
- ios - 世博会构建失败:尽管没有透明度,但世博会构建中图标透明度的重复错误
- crashlytics - 使用 Crashlytics 构建 Mac Catalyst
- javascript - 有没有办法悬停一个元素并使用纯 css/js 设置许多其他元素的样式?
- ansible - 如果标记为在 ansible 中使用,可能相当于厨师的什么?
- python - 如何使用内置的 max 函数输出 python CFD 字典中最常用的项目?
- arrays - 将大型单个 Json 数组拆分为包含 10K 条记录的多个 JSON 数组
- javascript - php重定向到另一个页面并捕获正文参数并作为标题发送
- r - 如何使用 R 将多个文件重命名为相同的文件名并移动到多个文件夹?
- python - 我希望在 python 3 中使用内置哈希 2.7 算法的 hashlib 实现