问题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 的框架。选项是带有 iterables和apache commons的番石榴