两种不同的ArrayList合并吗?

Aka*_*h M 0 java android

private ArrayList<SublistLocalData> catList;

private ArrayList<Localdata> nameList ,nameList1;
Run Code Online (Sandbox Code Playgroud)

两者都有不同的数据:

for(SublistLocalData  list: catList )
nameList1.addAll( list.nameList );
Run Code Online (Sandbox Code Playgroud)

我正在尝试将一种类型的arrayList数据添加到另一种类型的ArrayList中的概念,我点击此链接:

链接

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

Dam*_*ash 5

What should i do to solve this ?

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

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

private List<Object> list4Everything = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

编辑:

但是,如果您具有相同的对象,并且只想将两个已经存在的列表合并为新的单个列表,该怎么办。您应该使用方法List#addAll(Collection c)

为了避免举例,我们将列出三个列表:

private List<YourType> list1 = new ArrayList<>();
private List<YourType> list2 = new ArrayList<>();
private List<YourType> mergeResult = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

您可以通过各种选项将list1“ list2”中的所有数据插入其中mergeResult

选项1-使用megeResult的addAll。

mergeResult.addAll(list1);
mergeResult.addAll(list2);
Run Code Online (Sandbox Code Playgroud)

选项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
}
Run Code Online (Sandbox Code Playgroud)

注意:在此解决方案中,您有可能选择添加到的项目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
   }
}
Run Code Online (Sandbox Code Playgroud)

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

public static <T> boolean addAllNotContained(Collection<? super T> traget, Collection<? super T> 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();
}
Run Code Online (Sandbox Code Playgroud)

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

另一个选择是使用已经创建的框架来扩展默认Java。选项是番石榴,带有可迭代项apache commons