需求
当前,必须返回student表和class表中的所有数据。 如果有关联的条件,则为class_id。 如果可以用sql简单实现,直接连接表查询就可以了,但是现在项目是微服务器,不能连接表查询了,所以必须在代码中修改。定义三个类、student类、class类和返回所有数据的studentAndClass类。
导入Java.util .数组列表;
导入Java.util .列表;
公共类辅助工具
私有整合者id;
私有字符串名称;
公共集成电路
返回身份;
}
公共语音集(集成id ) {
this.id=id身份;
}
公共字符串通用名称
返回名称;
}
公共语音集名称(字符串名称) {
this.name=名称;
}
公共集成器获取类(
返回类;
}
公共语音设置类(集成类) {
this.classId=classId;
}
私有集成器类;
公共辅助(集成id、字符串名称、集成类)。
this.id=id身份;
this.name=名称;
this.classId=classId;
}
@Override
公共字符串字符串
返回超级.字符串(;
}
}
//*
* Created by郝雨这边on 2019/12/2。
*/
公共类{2}
私有集成器类;
私有字符串类名称;
公共集成器获取类(
返回类;
}
公共语音设置类(集成类) {
this.classId=classId;
}
公共字符串获取类名称(
返回类名;
}
公共类别名称(字符串类别名称)。
this .类名=类名;
}
公共类(集成类,字符串类名称)
this.classId=classId;
this .类名=类名;
}
@Override
公共字符串字符串
返回超级.字符串(;
}
}
数据的组装代码如下
导入Java.util .数组列表;
导入Java.util .列表;
公共类主
publicstaticvoidmain (字符串[ ]数组) {
liststudentstudentlist=新阵列列表(;
student student=新student (1,'小明',1 );
student student1=新student (2,'小红',2 );
辅助列表.添加(辅助);
sudentlist.add(student1;
列出类类类
ist = new ArrayList<>();Class cl = new Class(1,"1班");
Class c2 = new Class(2,"2班");
classList.add(cl);
classList.add(c2);
List<StudentAndClass> list = new ArrayList<>();
for (Student studentArray : studentList) {
for (Class aClass : classList) {
if(studentArray.getClassId().equals(aClass.getClassId())){
StudentAndClass studentAndClass = new StudentAndClass();
studentAndClass.setClassId(studentArray.getClassId());
studentAndClass.setClassName(aClass.getClassName());
studentAndClass.setId(studentArray.getId());
studentAndClass.setName(studentArray.getName());
list.add(studentAndClass);
}
}
}
}
}
双层for循环,此时时间复杂度是n2.
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Main {
public static void main(String[] args) {
List<Student> studentList = new ArrayList<>();
Student student = new Student(1,"小明",1);
Student student1= new Student(2,"小红",2);
studentList.add(student);
studentList.add(student1);
List<Class> classList = new ArrayList<>();
Class cl = new Class(1,"1班");
Class c2 = new Class(2,"2班");
classList.add(cl);
classList.add(c2);
// list 转成map,map存放的是key和value的映射关系
Map<Integer,Class> map = new HashMap<>();
for (Class aClass : classList) {
map.put(aClass.getClassId(),aClass);
}
List<StudentAndClass> list = new ArrayList<>();
if(studentList.size()>0){
for (Student studentArray : studentList) {
Class c1= map.get(studentArray.getClassId());
if(c1!=null){
StudentAndClass studentAndClass = new StudentAndClass();
studentAndClass.setClassId(studentArray.getClassId());
studentAndClass.setClassName(c1.getClassName());
studentAndClass.setId(studentArray.getId());
studentAndClass.setName(studentArray.getName());
list.add(studentAndClass);
}
}
}
}
将其中一个list转成map之后就成了并列for循环。此时时间复杂度成了n。
lamda表达式解决list转map问题更加方便了,一句代码解决三句代码才解决的问题。
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Student> studentList = new ArrayList<>();
Student student = new Student(1,"小明",1);
Student student1= new Student(2,"小红",2);
studentList.add(student);
studentList.add(student1);
List<Class> classList = new ArrayList<>();
Class cl = new Class(1,"1班");
Class c2 = new Class(2,"2班");
classList.add(cl);
classList.add(c2);
// list 转成map,map存放的是key和value的映射关系
// Map<Integer,Class> map = new HashMap<>();
// for (Class aClass : classList) {
// map.put(aClass.getClassId(),aClass);
// }
Map<Integer, Class> map = classList.stream().collect(Collectors.toMap(Class::getClassId, e -> e));
List<StudentAndClass> list = new ArrayList<>();
if(studentList.size()>0){
for (Student studentArray : studentList) {
Class c1= map.get(studentArray.getClassId());
if(c1!=null){
StudentAndClass studentAndClass = new StudentAndClass();
studentAndClass.setClassId(studentArray.getClassId());
studentAndClass.setClassName(c1.getClassName());
studentAndClass.setId(studentArray.getId());
studentAndClass.setName(studentArray.getName());
list.add(studentAndClass);
}
}
}
}
}