java - 将带有字符串集的 Map 转换为带有字符串的 Map (Java)
问题描述
这个问题并不难,我已经用自己的方式解决了,但我想听听你的意见,也许有什么方法可以让这个选项变得更好?爪哇 8-11。
Map<Set<String>, User> --> Map<String, User>
想象一下,集合内的元素不会重复。还有一点需要注意:许多唯一键可以指向相同的值。
我用以下代码做到了这一点:
Map<String, User> result = new HashMap<>();
existingMap.forEach((set, user) -> set.forEach(item -> result.put(set, user)));
所以,我的问题是 - 有没有更好的方法呢?我的意思是,也许 Stream API 已经有一些方法可以做到这一点?在“收集”方法的范围内
解决方案
这个问题无法解决。
考虑以下:
("Bill", "Tom", "Alice") -> User1
("Bill", "Tom", "Jane") -> User2
这对结构 1 ( Map<Set<String>, User>
) 有效,但对结构 2 ( ) 无效,Map<String, User>
因为它会导致数据丢失(有关 Bill 和 Tom 的信息将丢失)。
您可以考虑的另一种结构是从Map<Set<String>, User>
到的转换Map<String, Set<User>>
,这不会导致数据降级。
编辑:假设根据评论可以接受数据丢失,正常的 for 循环解决方案是:
Map<String, User> results = new HashMap<>();
for (Set<String> key : existing.keySet())
{
User v = existing.get(key);
for (String k : key)
{
results.put(k, v);
}
}
推荐阅读
- mongodb - 使用 Rsyslog 发送到 Loggly 并清理 mongodb 日志数据
- r - 从单独列中的嵌套列表中获取值
- flutter - 在我的文本中显示来自 API 的信息时出现问题
- javascript - 为什么 let 和 var 在 JS 中的行为与 this 不同
- java - 如何将 JVM 选项添加到 PeopleCode 调用?
- python - 我可以使用 python 脚本在 android 终端模拟器中执行命令吗
- subdomain - 子域邮件转发 *@subdomain.mydomain.com
- linux - 当文件由用户“system”和组“system”拥有时,这意味着什么?在android文件系统中
- database - 实时数据库不写入来自 android studio 的数据
- spring-boot - LastModifiedDate 应该使用哪些转换器,因为它会引发 UnsupportedTemporalTypeException 错误