一个对象的集合转化成另一个对象的集合 PO集合转换为VO集合
准备数据
import com.google.common.base.Function;
import com.google.common.collect.Lists;
import lombok.*;
import lombok.extern.slf4j.Slf4j;
import java.util.*;
import java.util.concurrent.ConcurrentMap;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Slf4j
public class StreamTest {
public static List<Student> stus = new ArrayList();
static {
Student s1 = new Student("2015134001", "小3", 15, "1501");
Student s2 = new Student("2015134003", "小4", 14, "1503");
Student s3 = new Student("2015134006", "小5", 15, "1501");
Student s4 = new Student("2015134008", "小6", 17, "1505");
Student s5 = new Student("2015134008", "小7", 19, "1505");
Student s6 = new Student("2015134008", "小8", 76, "1505");
Student s7 = new Student("2015134008", "小9", 7, "1505");
stus.add(s1);
stus.add(s2);
stus.add(s3);
stus.add(s4);
stus.add(s5);
stus.add(s6);
stus.add(s7);
stus.add(new Student("2015134012", "小c", 13, "1503"));
stus.add(new Student("2015134013", "小s", 14, "1503"));
stus.add(new Student("2015134015", "小d", 15, "1504"));
stus.add(new Student("2015134018", "小y", 16, "1505"));
}
public static void main (String[] args){
/*List<Pepole> transform = Lists.transform(stus, new Function<Student, Pepole>() {
public Pepole apply( Student entity) {
// 内部对象的转换操作
Pepole vo = new Pepole();
vo.setId(entity.getId());
vo.setName(entity.getName());
vo.setAge(entity.getAge());
return vo;
}
});*/
List<Pepole> transform1 = Lists.transform(stus,(entity)->{
Pepole vo = new Pepole();
vo.setId(entity.getId());
vo.setName(entity.getName());
vo.setAge(entity.getAge());
return vo;
});
log.info("新集合,{}",transform1);
}
}
@Data
@Getter
@Setter
@AllArgsConstructor
class Student {
private String id ;
private String name ;
private int age ;
private String grade ;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
class Pepole {
private String id ;
private String name ;
private int age ;
}
一种方法 引入com.google.guava 工具类
dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>21.0</version>
</dependency>
方法
lists方法:
public static <F, T> List<T> transform(
List<F> fromList, Function<? super F, ? extends T> function)
方法返回一个List对象,传入参数,要转换的集合对象,一个函数对象,传入要转换的集合对象的子对象 转换为目标集合的子对象
List<Pepole> transform1 = Lists.transform(stus,(entity)->{
Pepole vo = new Pepole();
vo.setId(entity.getId());
vo.setName(entity.getName());
vo.setAge(entity.getAge());
return vo;
});
log.info("新集合,{}",transform1);
2.直接使用Java8 的Stream api
List<Pepole> transform1 = stus.stream()
.map(e -> new Pepole(e.getId(), e.getName(),e.getAge()))
.collect(Collectors.toList());
log.info("新集合,{}",transform1);
3.借助工具类
if(CollectionUtils.isNotEmpty(stus)){
List<Pepole> transform1 = stus.stream().map(e -> {
Pepole p = new Pepole();
BeanUtils.copyProperties(e, p);
return p;
}).collect(Collectors.toList());
log.info("新集合,{}",transform1);
}