private ArrayList<SublistLocalData> catList;
private ArrayList<Localdata> nameList ,nameList1;
两者都有不同的数据:
for(SublistLocalData list: catList )
nameList1.addAll( list.nameList );
我正在尝试这个概念,将一种类型的arrayList数据添加到不同类型的ArrayList中,我按照以下链接:
我该怎么做才能解决这个问题?
答案 0 :(得分:5)
问题What should i do to solve this ?
答案:在Java中查找有关Collection framework的教程并阅读它。
如果要在单个列表中存储不同类型的对象,则应创建一个可以接受任何对象的列表。 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的框架。选项包括guava with iterables和apache commons
答案 1 :(得分:0)
如果SublistLocalData类和Localdata类之间存在任何关联,则可以创建一个类,它们都是超类,或者是两个类实现的接口。
假设你有这门课:class AbstractSuperClass {}
然后:这里如何声明superClass的列表:List<AbstractSuperClass> list;
使用此列表,您可以添加任何类型的AbstractSuperClass(从SublistLocalData和Localdata继承的类)
然后你可以写:
list.add(new SublistLocalData());
orlist.add(new Localdata());