使用 java 8 中的流反转映射[重复]

2023-12-01

我有一个Map<String, Set<String>>我需要扭转。这是一个数据示例:

("AA", ("AA01", "AA02", "AA03")
("BB", ("AA01", "BB01", "BB02")

我想要获得的是Map<String, Set<String>>的反向关系,像这样:

("AA01", ("AA", "BB"))
("AA02",("AA"))
("AA03",("AA"))
("BB01",("BB"))
("BB02",("BB"))

我能够做到这一点,但是使用 foreach:

private Map<String, Set<String>> getInverseRelationship(Map<String, Set<String>> mappings) {
    Map<String, Set<String>> result = new HashMap<>();

    mappings.entrySet().stream().forEach(record -> {
        String key = record.getKey();
        Set<String> itemSet = record.getValue();

        itemSet.forEach(item -> {
            Set<String> values = (result.containsKey(item))? result.remove(item) : new HashSet<>();
            values.add(key);
            result.put(item, values);
        });
    });

    return result;
}

有没有更好的方法使用 Java 8 流 API 来做到这一点?


你可以使用flatMap like :

Map<String, Set<String>> invertedMap = map.entrySet().stream()
        .flatMap(entry -> entry.getValue().stream()
                .map(v -> new AbstractMap.SimpleEntry<>(v, entry.getKey())))
        .collect(groupingBy(Map.Entry::getKey, mapping(Map.Entry::getValue, toSet())));

Using SimpleEntry你可以存储每个元素Set作为条目的键,映射的键作为条目的值

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 java 8 中的流反转映射[重复] 的相关文章

随机推荐

  • 在元组列表列表中查找重复项 Python

    我想从下面给定的列表中找到匹配的项目 我的列表可能非常大 元组 N1 10 中的第一项被复制并与另一个数组中的另一项匹配 ListA 中第一个数组中的元组 N1 10 N2 28 ListA 中第二个数组中的元组 N1 10 N3 98 L
  • 如何设置 UIImageView 的大小等于 UIImage 的大小?

    我有一个视图控制器UIImageView named someImageView 该图像视图没有默认值UIImage 我正在加载UIImage与下面的代码 UIImage myImage UIImage imageNamed sampleI
  • 如何在 Org 模式下将 csquotes 与 LaTeX 导出一起使用?

    使用时csquotes引号由 csquotes 根据上下文添加 这是通过用以下标记来完成的 enquote宏 即 enquote text 从 Org 模式导出到 LaTeX 时 引号标记为 and 例如作为 text 可以 Org mod
  • 如何在Android Google Analytics V4中获取clientId?

    我正在尝试在 Android 中获取自动设置的 Analytics clientId Android API 文档中对其设置的解释为setClientId 当我尝试使用时tracker get clientId 它返回空 有人有什么想法吗
  • 名称“File”在库“dart:html”和“dart:io”中定义

    有谁知道如何解决这个错误 这是我的代码 导入错误位于 文件 中 错误如下 名称 File 在库 dart html 和 dart io 中定义 override State createState gt ChatScreenState re
  • 如何在用户可见之前将 UITableView 滚动到所需的行?

    我想知道是否可以滚动UITableView到所需的行 甚至在用户可见之前 这样用户就不会意识到这种滚动操作 目前 这是我执行滚动到所需行的代码 class ThemeTableViewController UITableViewContro
  • java.lang.SecurityException:没有签名文件条目的清单部分

    我已经尝试过其他线程中的建议 但它们对我没有帮助 当我运行我的罐子时java jar BigJar jar我收到异常 Exception in thread main java lang SecurityException no manif
  • iOS Facebook 图书馆登录

    我刚刚通过此 URL 下载了适用于 iOS 的 facebook 库https github com facebook facebook ios sdk 我设法很好地运行示例应用程序 但是 当我单击登录按钮时 它实际上在浏览器中打开登录屏幕
  • Cron 作业未运行(在开发中)

    我已经指定了一个 cron 作业 用于在开发中进行测试 但它似乎没有运行 如何确保这些工作能够在生产中发挥作用 cron yaml cron description cron test gathering url test cron sch
  • scipy rv_连续非常慢

    我正在使用自定义函数f x 使用定义自定义分布copy s rv continuous班级 我的代码是 class my pdf gen rv continuous def pdf self x integral return f x in
  • 以透视方式绘制一系列 3D 投影的 2D 绘图

    我想绘制一个似然分布 基本上是NxT矩阵 其中每行代表每个时间步中某个变量的分布t t 0 T 这样我就可以可视化最大似然估计产生的轨迹 我想象了几个 2D 图 一个在另一个之前 如下所示 到目前为止基于this我试过了 def Traje
  • 如何调整 AVFrame 的大小?

    如何调整大小AVFrame I 这是我目前正在做的事情 AVFrame frame int width 600 height 400 AVFrame resizedFrame av frame alloc auto format AVPix
  • 从 Spring Boot 控制器返回 JAXB 生成的元素

    我正在生成大量 Java 文件http www ncpdp org的 XSD 文件 仅会员可用 生成它们后 我想在 Spring 控制器中使用它们 但在将响应转换为 XML 时遇到问题 我尝试返回元素本身以及 JAXBElement 但似乎
  • 如何将背景图像与猫头鹰轮播一起使用

    我想用猫头鹰旋转木马与背景图像而不是 img 标签 如使用http driveshift com car c10148 但是 插件站点中包含的每个示例都使用img tags 当您检查Shiftcarousel 它使用 url 图像作为 da
  • Java线程池[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我想学习用Java写一个线程池 有人能给我指出有用的资源吗 看看 Doug Lea 的书 它们现在已经相当老了 除非他发布了新书 不确定 但是 1 5 中添加的并发包是基于他的线程库
  • 为什么Assembly x86_64系统调用参数不像i386那样按字母顺序排列

    有一个问题困扰着我 那么 为什么在x86 32 the 参数在我认为在的寄存器中传递按字母顺序 eax ecx edx esi and ranked order esi edi ebp syscall arg0 arg1 arg2 arg3
  • Android NDK 链接

    我正在尝试构建一个调用 C 后端的 Android 应用程序 该后端使用 ZeroMQ 进行消息传递 根据安卓构建页面在 ZeroMQ 指南上 我构建了 ndk 版本 6 的本机工具链 并使用它 成功 构建了 ZeroMQ 但是 当我使用
  • 我们如何等待 HTTP 请求完成?

    使用 SO 上的几个答案 我们已经成功编写并执行了一个基本的 HTTP 请求 import Foundation let url URL URL string http jsonplaceholder typicode com posts
  • 连接/从网络驱动器复制

    不完全确定如何解决这个问题 我做了一些研究 但还是不够 尝试连接到工作中的网络驱动器并复制出最新的文件夹 更新到项目 对我来说 目录以 开头 但是当我将其添加到字符串变量时 它不会连接 并且在我时不会显示尝试检查一下 这有一个过程吗 这就是
  • 使用 java 8 中的流反转映射[重复]

    这个问题在这里已经有答案了 我有一个Map