最近做公司项目,其中一个任务需要做主子表的保存,使用到了java8新特性替代双重for循环,在这里使用一个小案例做下记录。
先准备两个实体类。
public class Student {
private String stuName;
private String classId;
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public String getClassId() {
return classId;
}
public void setClassId(String classId) {
this.classId = classId;
}
}
public class Class {
private String classId;
private String className;
public String getClassId() {
return classId;
}
public void setClassId(String classId) {
this.classId = classId;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
}
准备数据进行遍历,新特性写法确实简便,而且当数据量大的时候stream效率大于for。
List<Student> stuList=new ArrayList<>();
Student s1=new Student();
s1.setStuName("李探花");
s1.setClassId("001");
stuList.add(s1);
Student s2=new Student();
s2.setStuName("德古拉");
s2.setClassId("001");
stuList.add(s2);
Student s3=new Student();
s3.setStuName("地狱火");
s3.setClassId("002");
stuList.add(s3);
Student s4=new Student();
s4.setClassId("002");
s4.setStuName("服部半藏");
stuList.add(s4);
List<Class> classList = new ArrayList<>();
Class c1 = new Class();
c1.setClassId("001");
c1.setClassName("1班");
classList.add(c1);
Class c2 = new Class();
c2.setClassId("002");
c2.setClassName("2班");
classList.add(c2);
// 双重for循环写法
// for (int i = 0;i<stuList.size();i++){
// Student student = stuList.get(i);
// for (int j = 0;j<classList.size();j++){
// Class c = classList.get(j);
// if (student.getClassId().equals(c.getClassId())){
// System.out.println("学生"+student.getStuName()+"的班级为:"+c.getClassName());
// }
// }
// }
//转换为单层for循环
// Map<String,String> map = new HashMap<>();
// map.put(c1.getClassId(),c1.getClassName());
// map.put(c2.getClassId(),c2.getClassName());
// for (Student student : stuList){
// if (map.containsKey(student.getClassId())){
// System.out.println("学生"+student.getStuName()+"的班级为:"+map.get(student.getClassId()));
// }
// }
//新特性写法
Map map = classList.stream().collect(Collectors.toMap(Class::getClassId,Class::getClassName));
stuList.stream().forEach(s -> {
if (map.containsKey(s.getClassId())){
System.out.println("学生"+s.getStuName()+"的班级为:"+map.get(s.getClassId()));
}
});
版权声明:本文为qq_42129245原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。