安卓开发如何将List赋值给另一个List
#声明和实例化
声明:ArrayList a, 仅仅只是声明了一个list变量,亦或者相当于一个对象块的索引,但并未为其分配具体的完整的对象所需要的内存空间,其所分配的空间仅仅只是"a"变量所需空间;
实例化:实例化的过程是为对象分配完整的所需内存空间。此时,对象a才是该list的一个实例,然后将分配的内存地址返回给定义的变量“a”;
#java的实例化
1. 使用new关键词创建对象。
2.通过jdk中提供的工厂方法返回对象。如String str = String.vlaueOf("test");
3.通过反射机制。最经常使用的则是JDBC: String driver = "com.mysql.jdbc.Driver";Class.forName(driver);
4.通过类的clone()方法。
5.通过反序列化手段。
#结合背景知识,给出List赋值给另一个List的相关问题
[java]?view plain?copyArrayList
A.add("1");??
A.add("2");??
ArrayList
B?=?A;??此时B对象相当与A对象的引用,而并不是将A对象的值单纯的传递给B对象。即:B对象的操作将直接改变A对象。如B.add("3");结果A中也包含了“3”;
2.单纯的把值赋予对方方式多种。如下:
方式一:
[java]?view plain?copyArrayList?B =?new?ArrayList<>?(A);??方式二: [java]?view plain?copy
ArrayList?B =?A.clone();?? 方式三: [java]?view plain?copy
ArrayList?B =?new?ArrayList
B.addAll(A);?? 方式四: [java]?view plain?copy
for(String?s:?A)??
?B.add(s);??
快速高效的从一个list转化到另一个list
Lists.transform是Guava collect的里面的方法,提供将当前list中的对象转换为另外一个需要的list对象。
public static List transform(List fromList, Function function)
我们需要事项function的方法,Function中第一个泛型F是我们现有的list,
T是我们要转化的list。
怎么用的呢?看下面一个例子:
package guava; import java.util.Arrays; import java.util.List; import com.google.common.base.Function; import com.google.common.collect.Lists; class Entity { private Integer id; public Entity(final Integer id) { this.id = id; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } } public class GuavaTransform { public static void main(final String [] args) { List entities = Arrays.asList( new Entity(1), new Entity(2), new Entity(3) ); List ids = Lists.transform( entities, new Function() { public Integer apply(final Entity entity) { return entity.getId(); } } ); System.out.println(ids); // 需要注意的 entities.get(0).setId(4); System.out.println(ids); } } /** * 结果:[1, 2, 3] * [4, 2, 3] **/
定义一个Entity对象;
我们想把Entity中的id提取出来;
使用Lists.transform就OK了;
注意?从entities转化到ids时,只是转化到引用按照官方的说法?
The returned list is a transformed view of fromList?就是一个view,是不能改修改的。
看下面的例子:
package guava; import java.util.Arrays; import java.util.List; import com.google.common.base.Function; import com.google.common.collect.Lists; class EntityInteger { private Integer id; public EntityInteger(Integer id) { this.id = id; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } } class EntityStr { private String id; public EntityStr(String id) { this.id = id; } public String getId() { return id; } public void setId(String id) { this.id = id; } } public class GuavaTransform { public static void main(final String [] args) { final List entityIntegers = Arrays.asList( new EntityInteger(1), new EntityInteger(2), new EntityInteger(3) ); List entityStrs = Lists.transform( entityIntegers, new Function() { public EntityStr apply(final EntityInteger entity) { return new EntityStr(String.valueOf(entity.getId())); } } ); for(EntityStr entityStr : entityStrs){ System.out.print(entityStr.getId()); } System.out.println(); System.out.println("-------1-------"); entityIntegers.get(0).setId(4); for(EntityStr entityStr : entityStrs){ System.out.print(entityStr.getId()); } System.out.println(); System.out.println("-------2--------"); entityStrs.get(0).setId("5"); for(EntityStr entityStr : entityStrs){ System.out.print(entityStr.getId()); } } } /** * * 123 * -------1------- * 423 * -------2-------- * 423
现在我创建两个对象EntityInteger和EntityStr,要将EntityInteger中的id转换到EntityStr中的String类型的id中;
1上面的结果是转化后的结果;
1下面的修改了原来的list,元素发生改变;
2下面的是修改了transform之后的list,集合元素并没有发生改变。
但是我们有在开发中不可避免的就是要修改transfrom后的list元素,那么就可以重新new一个list。
List lists = Lists.newArrayList(entityStrs); lists.get(0).setId("6"); for(EntityStr entityStr : lists){ System.out.print(entityStr.getId()); } // 结果:623
上一篇: Qt实现苹果状态切换按钮
下一篇: Python配置pip国内镜像源的实现