在java开发中,经常能碰到list集合拷贝的需求,如将List拷贝成List提供给接口使用。

一般的写法:

//不使用stream拷贝list
List<UserDTO> dtoList = new ArrayList<>();
for (User user : list) {
UserDTO d = new UserDTO();
BeanUtils.copyProperties(user, d);
dtoList.add(d);
}

使用java8的stream流写法:

//使用stream拷贝list
List<UserDTO> dtoList = list.stream()
.map(e -> {
UserDTO d = new UserDTO();
BeanUtils.copyProperties(e, d);
return d;
})
.collect(Collectors.toList());

两者在实现User对象拷贝到UserDTO对象时都是用了spring中内置的BeanUtils(这类工具类很多。我这里用的是spring自带的)

实现原理都是遍历集合拷贝对象然后添加到新集合,看起来好像java8的stream流处理代码也没少多少,所以用哪个方式实现对list的拷贝,看个人喜好吧。