使用java8新特性替代双重for循环

  • Post author:
  • Post category:java

最近做公司项目,其中一个任务需要做主子表的保存,使用到了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 版权协议,转载请附上原文出处链接和本声明。