大忌-修改list中的对象
如果你想直接修改原list中的对象,应该怎么做?通过get拿到后直接修改?
可以看下面的代码:
@Test
public void test1() {
List name = Lists.newArrayList(“xx”);
List orderBaseInfoDtoList = Lists.transform(name, new Function<String, Model>() {
@Override
public Model apply(String input) {
return new Model(new Random().nextInt(10), input);
}
});
System.out.println(orderBaseInfoDtoList.get(0));
System.out.println(orderBaseInfoDtoList.get(0));
System.out.println(orderBaseInfoDtoList.get(0));
}
@ToString
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class Model {
private int id;
private String name;
}
TestGray.Model(id=6, name=xx)
TestGray.Model(id=8, name=xx)
TestGray.Model(id=0, name=xx)
List中的对象不建议直接修改,因为List可能并不是标准的List,如guava中的TransformingRandomAccessList,该list中访问的元素都是通过apply中实现的,因此访问该list中的元素时,拿到的对象总是new出来的。因此对list中的元素进行迭代修改时,需要注意。不建议直接修改list,而是采用copy的方式。
1万+

被折叠的 条评论
为什么被折叠?



