0
private ArrayList<SublistLocalData> catList;

private ArrayList<Localdata> nameList ,nameList1;

两者都有不同的数据:

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

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

关联

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

4

2 回答 2

5

问题What should i do to solve this ?

答案:找到一个关于Java Collection 框架的教程并阅读它。

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

private List<Object> list4Everything = new ArrayList<>();

编辑:

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

以免做例子,我们将有三个列表:

private List<YourType> list1 = new ArrayList<>();
private List<YourType> list2 = new ArrayList<>();
private List<YourType> 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 <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();
}

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

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

于 2013-04-19T10:25:32.640 回答
0

如果 SublistLocalData 类和 Localdata 类之间有任何关系,您可以创建一个类,它既是它们的超类,又是这两个类实现的接口。假设你有这个类:class AbstractSuperClass {} 然后:在这里如何声明超类的列表:List<AbstractSuperClass> list; 使用这个列表,您可以添加任何类型的 AbstractSuperClass(从它继承的类,如 SublistLocalData 和 Localdata )然后您可以编写:

list.add(new SublistLocalData());

orlist.add(new Localdata());
于 2013-04-19T10:31:44.007 回答