已知一个MiddleSchoolStudent(初中生)类,有学号、性别、年龄、年级、成绩5个属性。
由多个 MiddleSchoolStudent对象组成的数组为students,下面记录一下对students数组的一些操作。
这里使用了for循环、 Comparator、Stream API部分用法。
序: 已知MiddleSchoolStudent类如下
public class MiddleSchoolStudent {
private int idNumber; // 学生番号
private String gender; // 性別
private int age; // 年齢
private int grade; // 学年
private int score; // 成績
public MiddleSchoolStudent(int idNumber) {
this.idNumber = idNumber;
}
public String getInfo() {
return "学生番号:" + idNumber +
"\t性别:" + gender +
"\t年齢:" + age +
"\t学年:" + grade +
"\t成绩:" + score;
}
// getter&setter
public int getIdNumber() {
return idNumber;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getGrate() {
return grade;
}
public void setGrate(int grade) {
this.grade = grade;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
一、创建由多个 MiddleSchoolStudent对象组成的数组students
当你需要创建一个班级的时候,就需要很多student对象,我们可以将这个班级创建为一个包含很多个学生的数组students。
例如这个班级有10个学生,学号为1到10,剩下的性别、年龄、年级、成绩都先由随机数生成。
写一个创建并返回学生数组的方法, 参数为你要创建的学生人数:
public static MiddleSchoolStudent[] creatStudents(int count) {
MiddleSchoolStudent[] students = new MiddleSchoolStudent[count];
Random random = new Random();
for(int i = 0; i < count; i++) {
MiddleSchoolStudent student = new MiddleSchoolStudent(i + 1);
// 性別,男女随机
boolean isMale = random.nextBoolean();
String gender = isMale ? "男" : "女";
student.setGender(gender);
// 年齢,13~15之间随机整数
int age = random.nextInt(3) + 13;
student.setAge(age);
// 学年,1~3之间随机整数
int grade = random.nextInt(3) + 1;
student.setGrate(grade);
// 成績, 0~100之间随机整数
int score = random.nextInt(101);
student.setScore(score);
students[i] = student;
}
return students;
二、筛选出所有3年级的学生,并打印信息
遍历+if条件:
public static void main(String[] args) {
MiddleSchoolStudent[] students = creatStudents(10);
for (MiddleSchoolStudent student : students) {
if (student.getGrate() == 3) {
System.out.println(student.getInfo());
}
}
}
运行结果:
学生番号:6 性别:女 年齢:13 学年:3 成绩:44
学生番号:7 性别:男 年齢:15 学年:3 成绩:1
学生番号:8 性别:男 年齢:15 学年:3 成绩:72
学生番号:10 性别:女 年齢:13 学年:3 成绩:48
三、将所有学生按照分数的属性进行排序,并遍历打印信息
1、将数组转化为列表
2、使用Comparator+Lambda表达式进行简化的排序
3、用迭代器进行打印
public static void main(String[] args) {
MiddleSchoolStudent[] students = creatStudents(10);
List<MiddleSchoolStudent> studentList = Arrays.asList(students);
Collections.sort(studentList, Comparator.comparingInt(MiddleSchoolStudent::getScore));
Iterator<MiddleSchoolStudent> iterator = studentList.iterator();
while (iterator.hasNext()) {
MiddleSchoolStudent student = iterator.next();
System.out.println(student.getInfo());
}
}
运行结果:
学生番号:7 性别:男 年齢:15 学年:3 成绩:1
学生番号:6 性别:女 年齢:13 学年:3 成绩:44
学生番号:3 性别:男 年齢:13 学年:1 成绩:46
学生番号:10 性别:女 年齢:13 学年:3 成绩:48
学生番号:5 性别:女 年齢:13 学年:1 成绩:59
学生番号:8 性别:男 年齢:15 学年:3 成绩:72
学生番号:9 性别:男 年齢:15 学年:1 成绩:78
学生番号:1 性别:女 年齢:15 学年:2 成绩:79
学生番号:4 性别:男 年齢:13 学年:1 成绩:84
学生番号:2 性别:女 年齢:15 学年:2 成绩:98
四、将所有学生按照性别的属性,进行分别打印信息
1、将数组转化为列表
2、使用 Stream API
public static void main(String[] args) {
MiddleSchoolStudent[] students = creatStudents(10);
List<MiddleSchoolStudent> studentList = Arrays.asList(students);
studentList.stream()
.filter(student -> student.getGender().equals("男"))
.forEach(student -> System.out.println("男: " + student.getInfo()));
studentList.stream()
.filter(student -> student.getGender().equals("女"))
.forEach(student -> System.out.println("女: " + student.getInfo()));
}
运行结果:
男: 学生番号:7 性别:男 年齢:15 学年:3 成绩:1
男: 学生番号:3 性别:男 年齢:13 学年:1 成绩:46
男: 学生番号:8 性别:男 年齢:15 学年:3 成绩:72
男: 学生番号:9 性别:男 年齢:15 学年:1 成绩:78
男: 学生番号:4 性别:男 年齢:13 学年:1 成绩:84
女: 学生番号:6 性别:女 年齢:13 学年:3 成绩:44
女: 学生番号:10 性别:女 年齢:13 学年:3 成绩:48
女: 学生番号:5 性别:女 年齢:13 学年:1 成绩:59
女: 学生番号:1 性别:女 年齢:15 学年:2 成绩:79
女: 学生番号:2 性别:女 年齢:15 学年:2 成绩:98