从List转到另一个List需要注意的问题总结
来源:互联网 发布:骑士队数据 编辑:程序博客网 时间:2024/06/06 02:34
在项目中经常用到从数据中查到的数据封装在domain中,返回给前台时需要做一个转换到dto里,这时候有个细节,如果中间变量初始化在外面的话,最后得到的List的元素会全是同一个。
错误的写法:
刚开始的时候认为这种写法(UserDto dto = new UserDto();)不用每次循环都初始化一个变量,省内存,但是这样最后的结果里元素都是一样的,原因就是dto在循环外作了初始化,所以dto只指向了最后循环的值。
public static void main(String[] args) { List<User> userList = getFromDb(); List<UserDto> dtoList = new ArrayList<>(); //把domain转换为dto UserDto dto = new UserDto(); for(User user : userList) { dto.setName(user.getName()); dtoList.add(dto); } System.out.println(dtoList); } //这里只是模拟从数据库取值的操作 private static List<User> getFromDb() { List<User> userList = new ArrayList<>(); for(int i = 0; i < 5; i++) { User user = new User(i + ""); userList.add(user); } return userList; }}
User和UserDto都是简单的对象,只有一个name属性,这里就不写出来了。
打印结果
[UserDto [name=4], UserDto [name=4], UserDto [name=4], UserDto [name=4], UserDto [name=4]]
正确的写法:
public class TestList { public static void main(String[] args) { List<User> userList = getFromDb(); List<UserDto> dtoList = new ArrayList<>(); //把domain转换为dto UserDto dto = null; for(User user : userList) { dto = new UserDto(); //new 操作要写在循环体里 dto.setName(user.getName()); dtoList.add(dto); } System.out.println(dtoList); } //这里只是模拟从数据库取值的操作 private static List<User> getFromDb() { List<User> userList = new ArrayList<>(); for(int i = 0; i < 5; i++) { User user = new User(i + ""); userList.add(user); } return userList; }}
结果
[UserDto [name=0], UserDto [name=1], UserDto [name=2], UserDto [name=3], UserDto [name=4]]
另外:Arrays.asList()方法可以把一个数组一起装入到List里,不用写循环,代码更加简介。
阅读全文
0 0
- 从List转到另一个List需要注意的问题总结
- list嵌套需要注意的问题
- 向list中添加对象时需要注意的问题
- java中使用list.remove需要注意的问题
- [Python]对List进行复制时需要注意的问题
- python list列表添加元素需要注意的问题
- python list列表删除元素需要注意的问题
- 使用List中remove方法时需要注意的问题
- STL list在多线程下使用需要注意的问题
- 从c++转到Python需要注意的地方
- 从c++转到Python需要注意的地方
- 从vc6.0 直接转到vs2005、vs2010 其中要注意的问题总结
- 从vc6.0 直接转到vs2005、vs2010 其中要注意的问题总结
- 将list集合的数据转换为json字符串需要注意的问题
- List remove中要注意的问题
- sencha touch 的list滚动式注意问题
- List remove中要注意的问题
- List remove中要注意的问题
- 【目标检测】RCNN算法详解
- js 弹出框 importTags控件使用案例
- ImageView 的handler切换循环
- angular.js 增删改查练习2
- 简单的RecyclerView
- 从List转到另一个List需要注意的问题总结
- Android Tablayout和viewpage fragment连用
- Leetcode||48. Rotate Image
- java 基础
- SQL SERVER 创建文件组
- Mac OS 上用pyenv和pyenv-virtualenv管理多个Python多版本及虚拟环境
- QTabWidget样式设置
- 【官方文档】#Cocos2d-JS v3.0中的属性风格API
- Linux_vim常用命令总结