两个不同的ArrayList合并?

private ArrayList catList; private ArrayList nameList ,nameList1; 

两者都有不同的数据:

 for(SublistLocalData list: catList ) nameList1.addAll( list.nameList ); 

我正在尝试这个概念,将一种类型的arrayList数据添加到不同类型的ArrayList中,我按照以下链接:

链接

我该怎么做才能解决这个问题?

问题What should i do to solve this ?

答:在Java中查找有关Collection框架的教程并阅读它。

如果要在单个列表中存储不同类型的对象,则应创建一个可以接受任何对象的列表。 Java中的每个对象都inheritance自Object类。 因此,您需要创建以下内容:

 private List list4Everything = new ArrayList<>(); 

编辑:

如果你有相同的对象,你只想将两个已经存在的列表合并到新的单个列表中。 你应该使用方法List#addAll(Collection c)

为了避免这样做,我们将有三个列表:

 private List list1 = new ArrayList<>(); private List list2 = new ArrayList<>(); private List mergeResult = new ArrayList<>(); 

您可以使用各种选项将list1和’list2’中的所有数据插入mergeResult

选项1 – 使用megeResult的addAll。

 mergeResult.addAll(list1); mergeResult.addAll(list2); 

选项2 – 手动完成。

 for(YourType yt : list1) { //Itereate throug every item from list1 mergerResult.add(yt); //Add found item to mergerResult } for(YourType yt : list1) { //Itereate throug every item from list2 mergerResult.add(yt); //Add found item to mergerResult } 

注意:在此解决方案中,您可以选择添加到meregeResult女巫项目。

因此,例如,如果我们想要有不同的结果,我们可以做这样的事情。

 for(YourType yt : list1) { //Itereate throug every item from list1 if(mergerResult.contains(yt) == false) { //We check that item, already exits in mergeResult mergerResult.add(yt); //Add found item to mergerResult } } for(YourType yt : list1) { //Itereate throug every item from list2 if(mergerResult.contains(yt) == false) { //We check that item, already exits in mergeResult mergerResult.add(yt); //Add found item to mergerResult } } 

当我们执行两次相同的操作时,我们可以创建一个实用程序类。

 public static  boolean addAllNotContained(Collection traget, Collection source) { //We should assure first that target or source are not null int targetSize = target.size(); for(T item: source) { if(target.contains(item) == false) { target.add(item); } } return targetSize != target.size(); } 

注意:要获得类似的不同合并结果,您可以使用jest Set 。 它被创建为不存储重复项。

另一种选择是使用已经创建的扩展默认Java的框架。 选项是具有iterables和apache commons的 番石榴

如果SublistLocalData类和Localdata类之间存在任何关联,则可以创建一个类,它们都是超类,或者是两个类实现的接口。 假设你有这个类: class AbstractSuperClass {}那么:这里如何声明一个superClass的列表: List list; 使用此列表,您可以添加任何类型的AbstractSuperClass(从SublistLocalData和Localdatainheritance的类)然后您可以编写:

 list.add(new SublistLocalData()); orlist.add(new Localdata());