我有一个包含两个变量 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/