如何复制其他类型列表的列表?

时间:2017-10-06 05:19:22

标签: java android arraylist

我有eb local run

//将100个SomePojo对象添加到列表中。 现在该列表有100个对象。

如果我再创建一个实例,如下所示:

List< SomePojo > firstList = new ArrayList< SomePojo >();

这里,SomePojo和SomeOtherPojo里面有相同的公共变量。 如何将firstList的内容复制到secondList? 有没有办法做到这一点?

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:1)

1。使用 Collections.copy()

  

将一个列表中的所有元素复制到另一个列表中。在操作之后,目标列表中每个复制元素的索引将与源列表中的索引相同。目标列表必须至少与源列表一样长。如果它更长,则目标列表中的其余元素不受影响。

 public static <T> void copy(List<? super T> dest,
                List<? extends T> src)
  

<强>参数

     

dest - 目的地列表。

     

src - 源列表。

     

<强>抛出

     

IndexOutOfBoundsException - 如果目的地列表太小而无法包含整个源列表。

     

UnsupportedOperationException - 如果目标列表的list-iterator不支持set操作。

示例代码

List< SomePojo > firstList = new ArrayList< SomePojo >();
List< SomeOtherPojo > secondList = new ArrayList< SomeOtherPojo >(firstList.size());

Collections.copy(secondList,firstList);

2。使用 ArrayList.addAll();

  

它将指定Collection c的所有元素添加到当前列表中。    将所有指定的元素添加到指定的集合中。

ArrayList<ChatDataModel> firstList = new ArrayList<>();
firstList.add(model);
firstList.add(model4);
firstList.add(model2);
firstList.add(model3);
ArrayList<ChatDataModel> secondList = new ArrayList<>(firstList.size());
secondList.addAll(firstList);

答案 1 :(得分:0)

java.util.ArrayList.addAll(Collection c)方法将指定集合中的所有元素按指定集合的​​迭代器返回的顺序附加到此列表的末尾。如果在操作正在进行时修改了指定的集合,则此操作的行为是未定义的(如果指定的集合是此列表,则表示此调用的行为未定义,并且此列表为非空)。

firstList.addAll(anotherListObjectWhoHasSamePojoType)

答案 2 :(得分:0)

是的,有办法。

firstArrayList.addAll((ArrayList<type>) secondArrayList.clone());

                          or

firstArrayList.addAll((ArrayList<type>) secondArrayList);

有关克隆 addAll 之间差异的详细信息,请参阅link

答案 3 :(得分:0)

可以:

secondList.addAll(firstList);

如果SomePojo扩展了SomeOtherPojo

否则你需要 - 例如 - 在一个循环中将SomePojo转换为SomeOtherPojo,并使用一些简单的适配器类来复制&#34;相同的公共变量&#34;从SomePojo到SomeOtherPojo的新实例,然后将其添加到secondList。

使用反射得到更多通用解决方案是可能的。设置这个&#34;相同的公共变量&#34;。