java - 获取一个 ArrayList,其中包含某些对象类型的两个不同大小的 arraylist 的并集

标签 java object comparison for-loop arraylist

我有一个包含两个变量 Title 和 ID 的 bean 类。

public class Bean(){
    private String title;
    private String ID;
}

我还有两个 Bean 类型的数组列表 - ArrayList firstList 和 ArrayList secondaryList。两者都有不同数量的 Bean 元素,即两个数组列表的大小不同,并且它们的大小可能很大。其中存在的一些 Bean 元素可能包含相同的 ID。

现在我有一个不同的 bean 类 MainBean,其中包含三个变量

public class Mainbean(){
    private String firstTitle;
    private String secondTitle;
    private String ID;
}

我需要根据上述两个数组列表 - ArrayList FinalList 中的值创建一个 MainBean 类型的新 ArrayList。

在比较上述两个数组列表(firstList 和 secondaryList)时,需要记住以下几点 -

1) 第一个条件 - 如果两个列表中都存在相同的 ID,则新的 ArrayList FinalList 将填充该 ID,并填充第一个列表中的第一个标题和第二个列表中的第二个标题。

2) 如果firstList 中的ID 不存在于secondList 中,则finalList 将具有firstList 中的ID 和firstTitle,而secondTitle 将为空。

3) 如果firstList 中不存在secondList 中的ID,则finalList 将具有secondList 中的ID 和secondTitle,而firstTitle 将为空。

请帮我形成这样一个finalList数组列表。

最佳答案

一个想法是使用归并排序的合并过程。因此,您首先对两个列表进行排序,然后使用您指定的条件将它们合并为一个列表。排序后的代码将是(或多或少):

i = 0;
j = 0;
while (i < m && j < n) {
  Bean b1 = firstList.get(i);
  Bean b2 = secondList.get(j);
  int id1 = b1.getID();
  int id2 = b2.getID();
  if (id1 < id2) { // id2 is bigger, get from firstList, increment i
    finalList.add(new MainBean(id1,b1.getTitle(),null);
    i++;
  } else if (id1 > id2) { // id1 is bigger, get from secondList, increment j
    finalList.add(new MainBean(id2,null,b2.getTitle()));
    j++;
  } else { // both are the same, get from both, increment both
    finalList.add(new MainBean(id1,b1.getTitle(),b2.getTitle()));
    i++;
    j++;
  }
}
while (i < m) { // take the rest of firstList
  Bean b = firstList.get(i);
  finalList.add(new MainBean(b.getID(),b.getTitle(),null));
  i++;
}
while (j < n) { // take the rest of secondList
  Bean b = secondList.get(j);
  finalList.add(new MainBean(b.getID(),null,b.getTitle()));
  j++;
}

注意:

  • m = firstList.length();
  • n = secondaryList.length();
  • 我假设 FinalList 在执行此过程之前已初始化

关于java - 获取一个 ArrayList,其中包含某些对象类型的两个不同大小的 arraylist 的并集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6562994/

相关文章:

object - 在golang中如何确保在创建对象后使用方法?

javascript - 如何在javascript中创建类似对象的数组

java - 比较字符串避免 NullPointerException

java - NetBeans 在 OneDrive 上找不到项目

python - 如何捕获在python中的对象上调用的任何方法?

java - 使用 hibernate 持久抛出的反射调用方法 object.getId() 抛出lazyInitializeException

javascript - 优化此双重比较结果以在 javascript 中排序

c++ - `bool operator<(Contact&)' 必须正好有两个参数

java - Java 中的 asSingleEntity()

java - 避免多次垃圾收集执行