【发布时间】:2015-11-22 03:27:38
【问题描述】:
我有两个多图,它们是从两个巨大的 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>>();
bigList 内将是单独的小列表 A、B、C 等。
我计划在检查第二个 Multimap 中的单个列表包含该“关键”元素的基础上,从两个文件的每个 bigList 中选择单个列表。如果是,则比较这两个列表并找出无法匹配的内容。
方法二:
比较两个Multimaps,但我不知道该怎么做。
哪种方法的执行时间应该更短?我需要在最短的时间内完成操作。
【问题讨论】:
-
您想知道“是否”它们相等,还是想获取缺失值的列表?
-
“我有两个多图,它们是从两个巨大的 CSV 文件创建的。”那你为什么要在内存中做呢?为什么不使用数据库?
-
@durron597 首先检查在第一个多图中检查的条目键是否在第二个多图中可用。如果是,则检查两个多图中与该键关联的值在各个方面都相等。如果它们在任何方面存在差异,则该记录将被视为不同,需要取出并进行相应处理。
标签: java csv arraylist guava multimap