【发布时间】:2019-12-24 16:56:43
【问题描述】:
假设我有 2 个对象,Object1 和 Object2。它们的基本结构如下:
对象 1
int id
String email
对象 2
int id
ArrayList<String> emails
现在我有 2 个 ArrayList,Object1 和 Object2 之一。找到对象 1 的电子邮件包含在对象 2 的电子邮件 ArrayList 中的匹配项,然后将它们的 id 存储在 HashMap(或任何其他包含 2 个整数的数据结构)中的有效方法是什么?
我知道显而易见且基本的解决方案是用 2 个 for 循环强制它,如下所示:
ArrayList<Object1> obj1List;
ArrayList<Object2> obj2List;
HashMap<Integer, Integer> idMapping = new HashMap()<>;
for (Object1 obj1 : obj1List){
String obj1Email = obj1.getEmail();
for (Object2 obj2 : obj2List){
ArrayList<String> obj2EmailList = obj2.getEmails();
if(obj2EmailList.contains(obj1Email)){
int obj1Id = obj1.getId();
int obj2Id = obj2.getId();
idMapping.put(obj1Id, obj2Id);
}
}
}
每个 ArrayList 都有大约一千个对象,因此性能确实不是什么大问题。但是,我确信有更优雅的方法可以解决这个问题。我猜可能使用流,但我对它们还不够熟悉,无法做到这一点。有什么建议吗?
【问题讨论】:
-
如果您坚持使用
ArrayList,那么从性能的角度来看,这与您将获得的一样好。流可能会使代码更短,但不会使其更快。 -
保留迭代解决方案,它更具可读性并且优于流解决方案。
标签: java arraylist java-stream