talk is cheap, show me the code.
应用场景
对一批物品开增值税专票时,限制每张专票最多有8个明细项;
开增值税普票时,限制每张发票最多有200个明细项;
这时我们对这一批物品进行开票时,程序就需要能做到自动拆分成多张发票。
需求及功能实现
将20位学生进行分班,每个班最多8个学生
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
/**
* 需求:将20位学生进行分班,每个班最多8个学生
*/
public class Main {
public static void main(String[] args) {
// 初始化班级容器
LinkedList<SchoolClass> schoolClasses = initializeSchoolClasses();
// 所有学生
List<Student> allStudents = getAllStudents();
// 遍历学生,进行分班
for (Student currentStudent : allStudents) {
SchoolClass currentClass = schoolClasses.getLast();
// 班级学生人数超过8人,增加班级
if (currentClass.getStudents().size() >= 8) {
SchoolClass newSchoolClass = new SchoolClass(new ArrayList<>());
schoolClasses.addLast(newSchoolClass);
currentClass = newSchoolClass;
}
// 学生进入班级
currentClass.getStudents().add(currentStudent);
}
for (SchoolClass schoolClass : schoolClasses) {
System.out.println("=============================");
for (Student student : schoolClass.getStudents()) {
System.out.println(student);
}
}
}
/**
* 初始化班级容器,默认有一个班级
* 选用{@link LinkedList}作为容器,方便获取最后一个元素
*
* @return
*/
private static LinkedList<SchoolClass> initializeSchoolClasses() {
LinkedList<SchoolClass> schoolClasses = new LinkedList<>();
schoolClasses.add(new SchoolClass(new ArrayList<>()));
return schoolClasses;
}
private static List<Student> getAllStudents() {
List<Student> allStudents = new ArrayList<>();
for (int i = 1; i <= 20; i++) {
allStudents.add(new Student(i, "王" + i, 18, "男", "重庆市南岸区茶园路" + i + "号"));
}
return allStudents;
}
}
控制台输出
=============================
Student(id=1, name=王1, age=18, sex=男, address=重庆市南岸区茶园路1号)
Student(id=2, name=王2, age=18, sex=男, address=重庆市南岸区茶园路2号)
Student(id=3, name=王3, age=18, sex=男, address=重庆市南岸区茶园路3号)
Student(id=4, name=王4, age=18, sex=男, address=重庆市南岸区茶园路4号)
Student(id=5, name=王5, age=18, sex=男, address=重庆市南岸区茶园路5号)
Student(id=6, name=王6, age=18, sex=男, address=重庆市南岸区茶园路6号)
Student(id=7, name=王7, age=18, sex=男, address=重庆市南岸区茶园路7号)
Student(id=8, name=王8, age=18, sex=男, address=重庆市南岸区茶园路8号)
=============================
Student(id=9, name=王9, age=18, sex=男, address=重庆市南岸区茶园路9号)
Student(id=10, name=王10, age=18, sex=男, address=重庆市南岸区茶园路10号)
Student(id=11, name=王11, age=18, sex=男, address=重庆市南岸区茶园路11号)
Student(id=12, name=王12, age=18, sex=男, address=重庆市南岸区茶园路12号)
Student(id=13, name=王13, age=18, sex=男, address=重庆市南岸区茶园路13号)
Student(id=14, name=王14, age=18, sex=男, address=重庆市南岸区茶园路14号)
Student(id=15, name=王15, age=18, sex=男, address=重庆市南岸区茶园路15号)
Student(id=16, name=王16, age=18, sex=男, address=重庆市南岸区茶园路16号)
=============================
Student(id=17, name=王17, age=18, sex=男, address=重庆市南岸区茶园路17号)
Student(id=18, name=王18, age=18, sex=男, address=重庆市南岸区茶园路18号)
Student(id=19, name=王19, age=18, sex=男, address=重庆市南岸区茶园路19号)
Student(id=20, name=王20, age=18, sex=男, address=重庆市南岸区茶园路20号)
可以看到,成功将20位学生分到了三个班级,且每个班最多8个学生,完成需求。
POJO
SchoolClass.java
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.List;
@Data
@AllArgsConstructor
public class SchoolClass {
private List<Student> students;
}
Student.java
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
private Integer id;
private String name;
private Integer age;
private String sex;
private String address;
}