在我们开发过程中经常会遇到两个集合字段之间的替换问题。
例如:将学生集合的班级编号替换成班级名称
学生类:Student。
public class Student{
String id;
String name;
String classNo;
}
班级类:MyClass。
public class MyClass{
String className;
String classNo;
}
那么在java8以前还没有stream的时候我们可能会这样子写。
for(Student s:studentList){
for(MyClass c:myClassList){
if(s.getClassNo().equals(c.getClassNo)){
s.setClassNo(c.getClassName)
}
}
}
这样子写循环套循环,在数据量很大时,效率是很低下的。
在java引入了stream和Lambda表达式后,我们的代码就可以这样子写。
List<Student> collect = studentList.stream().map(s -> {
List<MyClass> collect1 = myClassList.stream().filter(c ->
s.getClassNo().equals(c.getClassNo()))
.map(p -> {
s.setClassNo(p.getClassName());
return s;
}).collect(Collectors.toList());
return collect1;
}).flatMap(List::stream).collect(Collectors.toList());
看起来好像更复杂了一些但是实际上代码层面来说的话效率提升了很多,因为stream是基于流去操作的,如果看不懂的话可以去读我前一篇《Java8中的Stream相关详解》。