如何比较两个 MultiMap?

2023-12-26

我有两个 Multimap,它们是由两个巨大的 CSV 文件创建的。

Multimap<String, SomeClassObject> mapOne = ArrayListMultimap.create();
Multimap<String, SomeClassObject> mapTwo = ArrayListMultimap.create();

我假设一个 CSV 列作为一个键,每个键都有数千个与之关联的值。这些数据中包含的数据Multimaps 应该是相同的。现在我想比较这些数据Multimaps 并查找是否有任何值不同。这是我正在考虑的两种方法:

方法一:

列出一份大清单Multimap。这个大列表将包含一些单独的列表。每个较小的列表都包含一个唯一的值,该值是从中读取的“键”Multimap及其关联值,它们将构成该单独列表的其余部分。

ArrayList<Collection<SomeClassObject>> bigList = new ArrayList<Collection<SomeClassObject>>();

Within bigList将是单独的小列表 A、B、C 等。

我计划从每个列表中挑选单独的列表bigList两个文件的基础上检查第二个单独的列表Multimap包含该“关键”元素。如果是,则比较这两个列表并找到任何无法匹配的内容。

方法二:

比较两者Multimap但我不确定如何做到这一点。

哪种方法的执行时间应该更短?我需要在最短的时间内完成手术。


Use Multimaps.filterEntries(Multimap, Predicate) http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Multimaps.html#filterEntries(com.google.common.collect.Multimap,%20com.google.common.base.Predicate).

如果你想知道两者之间的差异Multimaps,基于以下内容编写过滤器非常容易containsEntry,然后使用过滤行为高效地找到所有不匹配的元素。只需构建Predicate基于一张地图,然后过滤另一张地图。

这就是我的意思。在这里,我使用的是 Java 8 lambda,但您可以查看这篇文章的修订历史记录以查看 Java 7 版本:

public static void main(String[] args) {
  Multimap<String, String> first = ArrayListMultimap.create();
  Multimap<String, String> second = ArrayListMultimap.create();
  
  first.put("foo", "foo");
  first.put("foo", "bar");
  first.put("foo", "baz");
  first.put("bar", "foo");
  first.put("baz", "bar");
  
  second.put("foo", "foo");
  second.put("foo", "bar");
  second.put("baz", "baz");
  second.put("bar", "foo");
  second.put("baz", "bar");
       
  Multimap<String, String> firstSecondDifference =
      Multimaps.filterEntries(first, e -> !second.containsEntry(e.getKey(), e.getValue()));
  
  Multimap<String, String> secondFirstDifference =
      Multimaps.filterEntries(second, e -> !first.containsEntry(e.getKey(), e.getValue()));
  
  System.out.println(firstSecondDifference);
  System.out.println(secondFirstDifference);
}

输出是不在另一个列表中的元素,在这个人为的示例中:

{foo=[baz]}
{baz=[baz]}

如果映射匹配,这些多重映射将为空。


在 Java 7 中,您可以使用如下方式手动创建谓词:

public static class FilterPredicate<K, V> implements Predicate<Map.Entry<K, V>> {
  private final Multimap<K, V> filterAgainst;

  public FilterPredicate(Multimap<K, V> filterAgainst) {
    this.filterAgainst = filterAgainst;
  }

  @Override
  public boolean apply(Entry<K, V> arg0) {
    return !filterAgainst.containsEntry(arg0.getKey(), arg0.getValue());
  }
}

用它作为参数Multimaps.filterEntries()像这样:

Multimap<String, String> firstSecondDifference =
    Multimaps.filterEntries(first, new FilterPredicate(second));

Multimap<String, String> secondFirstDifference =
    Multimaps.filterEntries(second, new FilterPredicate(first));

否则,代码与上面的 Java 8 版本相同(具有相同的结果)。

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

如何比较两个 MultiMap? 的相关文章

  • 如果列名不同,则一对多休眠连接

    我有三个具有以下结构的表 合同 gt Contract id 主要 customer company id Vendor company id 公司 gt Company id 主要 创建日期 创建者 Company Timeline gt
  • Java 读取大文本文件时出现 OutOfMemoryError

    我是 Java 新手 正在读取非常大的文件 需要一些帮助来理解问题并解决它 我们有一些遗留代码 必须对其进行优化才能正常运行 文件大小仅在 10mb 到 10gb 之间变化 只有当文件开始大小超过 800mb 时才会出现启动问题 Input
  • GET 请求的 Spring 注解

    这两种spring GET方法有什么区别呢 哪一种是首选方法 Component Scope request Path public class TestComponent GET Path hello public String prin
  • 如何在Java中优雅地处理SIGKILL信号

    当程序收到终止信号时如何处理清理 例如 我连接到一个应用程序 希望任何第三方应用程序 我的应用程序 发送finish注销时的命令 发送该信息最好说什么finish当我的应用程序被破坏时的命令kill 9 编辑1 kill 9无法被捕获 谢谢
  • Java:线程“主”中的异常 java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:

    我是初学者 谁能帮我弄清楚我们在做什么 我正在尝试读取字符串并将字符串的每个字符存储在数组中 import java util Scanner public class CoreMainDigitExtractor static Scann
  • 如何将现有的 SQLite3 数据库导入 Room?

    好吧 我在桌面上使用 SQLite3 创建了一个只需要读取的某些信息的数据库 我正在制作的应用程序不需要在此表中插入或删除信息 我在 Room 数据库层上做了相当多的谷歌搜索 所有文档都需要在构建应用程序时在 Room 中创建一个新的数据库
  • JTextField 和 JTextArea

    JTextField 和 JTextArea 有什么不同 是否可以在一个班级中使用这两个班级 总之 JTextField 是单行文本字段 而 JTextArea 可以跨越多行 文档中清楚地解释了这些差异 文本区 http docs orac
  • OpenNLP 与斯坦福 CoreNLP

    我一直在对这两个包进行一些比较 但不确定该往哪个方向走 我简单地寻找的是 命名实体识别 人 地点 组织等 性别识别 一个不错的训练 API 据我所知 OpenNLP 和斯坦福 CoreNLP 提供了非常相似的功能 然而 Stanford C
  • Java 中的 ExecuteUpdate sql 语句不起作用

    我正在学习如何将 SQL 与 Java 结合使用 我已成功安装 JDBC 驱动程序 并且能够从数据库读取记录并将其打印在屏幕上 我的问题发生在尝试执行更新或插入语句时 没有任何反应 这是我的代码 问题所在的方法 public static
  • 将现有 eclipse 项目导出到 war 文件时出现“模块名称无效”

    我正在尝试将现有 Eclipse 项目导出到 war 文件 但无论我在 WAR Export 对话框页面中输入什么 系统总是返回 模块名称无效 我不知道如何解决这个问题 谢谢您的帮助 我有同样的问题 我修复了它 请按照以下步骤操作 您可以创
  • 更改 JComboBox 中滚动条的大小

    有谁知道如何手动更改 jComboBox 中的滚动条大小 我已经尝试了一大堆东西 但没有任何效果 好吧 我明白了 您可以实现 PopUpMenuListener 并使用它 public void popupMenuWillBecomeVis
  • 是否有最新的 Facebook Java SDK? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 好像没找到最近更新的 如果没有 是否有一个好的 Java 库来执行与 Facebook 的 API 交
  • 如何在 Bean Validation 1.0 中构造 ConstraintViolationException?

    我对 javax validation API 感到困惑 我正在编写一个简单的测试来理解它 Sample sample new Sample Set
  • 多线程——更快的方法?

    我有一堂有吸气剂的课程getInt 和一个二传手setInt 在某个领域 比如说领域 Integer Int 一个类的一个对象 比如说SomeClass The setInt 这里是同步的 getInt isn t 我正在更新的值Int来自
  • MongoDB java 驱动程序 3.0 在身份验证时无法捕获异常

    我超级卡住o 0 在尝试通过 Java 驱动程序进行身份验证时 存在捕获异常的问题 正如你可能会看到的Throwable类不工作 private MongoClient mongoClient private MongoDatabase m
  • 配置jmxremote时无法正常停止tomcat

    我添加了一个jmxremotecatalina bat中的配置 set JAVA OPTS Dcom sun management jmxremote port 9004 Dcom sun management jmxremote ssl
  • Java 中处理异步响应的设计模式

    我读过类似问答的答案 如何在 JAVA 中创建异步 HTTP 请求 https stackoverflow com questions 3142915 how do you create an asynchronous http reque
  • 如何将库添加到 LIBGDX 项目的依赖项 gradle

    一切都在问题中 我已经尝试了在 SO 和其他网站中找到的所有答案 但没有运气 这就是我迄今为止尝试过的 adding compile fileTree dir lib include jar 到我的 build gradle adding
  • CXF:通过 SOAP 发送对象时如何排除某些属性?

    我使用 Apache CXF 2 4 2 当我将数据库中的某个对象返回给用户时 我想排除一些属性 例如密码 我怎样才能做到这一点无需创建临时的班级 有这方面的注释吗 根据 tomasz nurkiewicz 评论我应该使用 XmlTrans
  • 如何使用注释处理 Hibernate 和 Spring 中的连接查询?

    我正在使用 Spring 和 Hibernate 以及 MySQL 开发应用程序 我是 Hibernate 新手 完成了基本任务 现在我需要在选择查询中应用联接以使用注释从多个表中获取数据 我已经搜索过但仍然没有任何想法 这是我的数据库表和

随机推荐

  • Shiny/R 错误:路径应该是项目目录中的文件

    我的 Shiny 应用程序将在本地运行 但当我尝试部署到shinyapps io 时 它不会运行 我通过删除路径中的 点 暂时解决了该问题 csv file data lt read csv Users JMJC Desktop bbtea
  • MongoDB:更新/更新插入与插入

    最近我注意到多次更新插入之间存在巨大的性能差异 通过批量操作 https docs mongodb org manual core bulk write operations 与插入 多个文档 我想知道我的说法是否正确 更新插入 更新就像f
  • 图像方向 - Android

    在过去一个月左右的时间里 我一直断断续续地与这个错误作斗争 每当我认为我已经解决了它 它似乎就会以某种形式回来 这是旧的 Android 图像旋转 90 度 错误 我在这里阅读了无数的帖子 StackOverFlow 并尝试了多种方法 但似
  • 将 [String: AnyObject] 转换为 [String: Any] [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我有一个 String AnyObject 类型的 Swift 变量 但是我尝试调用的函数需要一个 String Any
  • shebang 标志与 set 内置标志之间的区别

    在 shebang 行上传递给脚本的标志与使用set内置 例如 bin bash e do stuff vs bin bash set e do stuff 这个问题并不具体针对 e标志 但一般来说对于任何此类标志 显然set flags
  • WCF 服务默认值

    我的 WCF 服务有以下数据协定类 DataContract Name MyClassDTO public class MyClass private string name Default Name DataMember public s
  • 如何强制仅匿名访问控制器操作?

    我可以使用 AllowAnonymous 属性允许用户访问控制器操作 但是是否有属性只允许匿名用户访问操作 例如 AllowAnonymousOnly 不 它不存在 但是 您可以通过创建自己的属性来创建它 该属性继承自授权属性 https
  • 使用原始类型进行模乘的方法

    有没有办法构建例如 853467 21660421200929 100000000000007没有 BigInteger 库 请注意 每个数字都适合 64 位整数 但乘法结果不适合 这个解决方案似乎效率低下 int64 t mulmod i
  • Scala 集合上的高效分组聚合

    我经常需要做类似的事情 coll groupBy f mapValues foldLeft x g 达到相同效果但避免显式构造中间集合的最佳方法是什么groupBy 您可以将初始集合折叠在保存中间结果的地图上 def groupFold A
  • 如何在 Action 运行的 Bash 脚本中访问 GitHub Action 环境变量?

    我无法从操作运行的脚本中访问在 GitHub 操作配置文件顶层定义的环境变量 例如 给定以下配置文件 name x pull request on pull request env FOO bar jobs test runs on ubu
  • 为什么我仍然看到发布者未知并出现 UAC 提示?

    我制作了自己的 CA 然后制作了 pfx 文件 我正在使用 Wix 工具集来构建安装程序 在 wix 项目文件中 我使用以下内容对其进行了编辑
  • 将 Func 委托转换为字符串

    有没有办法将现有的 Func 委托转换为这样的字符串 Func
  • 错误:Kotlin:不支持的插件选项:org.jetbrains.kotlin.android:enabled=true

    今天我收到此错误 而一小时前完全相同的代码正在运行 错误 Kotlin 不支持的插件选项 org jetbrains kotlin android enabled true 并且这个项目不运行 原因 重复条目 更新 从用户文件夹中删除 An
  • Java 优化字符串与字符数组

    在我正在编写的程序中 我正在进行大量的字符串操作 我正在尝试提高性能 并且想知道使用 char 数组是否会显示出不错的性能提升 有什么建议么 你在做什么操纵 您可以发布代码示例吗 您可能想看一下字符串生成器 http java sun co
  • 用于切换功能和启用/禁用的变量

    正如我之前的问题一样 我正在制作一个巨魔功能 现在我正在尝试弄清楚如何让它切换以使其工作 这样我的朋友就不必时不时地禁止它 切换命令可以工作 但它实际上在内部不起作用 注意 我有两个不和谐帐户 因此我可以在另一个帐户上进行测试 使用切换开关
  • Flink - 多源集成测试

    我有一份 Flink 工作 正在使用此处描述的方法进行集成测试 https ci apache org projects flink flink docs stable dev stream testing html integration
  • TSan 在 Boost 无锁队列中报告数据竞争

    我在跑boost 无锁队列文档中给出的 MPMC 示例 https www boost org doc libs 1 79 0 doc html lockfree examples html使用线程清理程序 令我惊讶的是 这个基本示例包含按
  • 无法以 root 身份通过 SSH 连接到 EC2 服务器 - 请以用户“ubuntu”而不是用户“root”身份登录 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在尝试通过 WinSCP 通过 SSH 连接到我的服务器 尽管 putty 也会出现问题 我有 Ubuntu 12 04 我已经编辑过 etc s
  • 使用 ufw (UncomplicatedFirewall) 作为 api

    我知道ufw是用python写的 是否可以通过 python 使用 ufw 作为 api 当然 ufw可执行文件只是一个同名的 python 包的薄包装 我不知道任何文档 但您可以浏览源代码并查看一切是如何工作的 找出ufw脚本位置使用wh
  • 如何比较两个 MultiMap?

    我有两个 Multimap 它们是由两个巨大的 CSV 文件创建的 Multimap