我需要创建一个方法,该方法删除具有变量grade=1的对象数组中的所有对象,并返回“调整大小”的对象数组。
这些对象如下所示:
public class Exam {
private Course course; // Course is a class
private Student student; // Student is a class
private Integer grade;
private LocalDateTime date; }
public class Student{
private String id;
private LocalDate birthDate; }
public class Course {
private String id;
private String name;
private Integer ECTS;
private Profesor subjectBearer;
private Student[] student;}
该方法需要如下所示:
private Exam[] filterPassedExams(Exam[] exams) { ...}
任何关于如何在不使用列表的情况下解决问题的帮助或建议在我们还没有学习列表的课程中都是很棒的,所以我们不能真正使用它们(但我也想知道解决方案,如果它更快,以便将来使用)。
发布于 2018-10-21 04:12:45
我会流式传输数组,过滤需要保留的检查,然后将流转换回数组:
private Exam[] filterPassedExams(Exam[] exams) {
return Arrays.stream(exams).filter(e -> e.grade.intValue() != 1).toArray(Exam[]::new);
}
发布于 2018-10-21 05:52:54
我的方法是迭代exams
,并立即将通过的检查收集到一个新的数组passedExams
中
private Exam[] filterPassedExams(Exam[] exams) {
Exam[] passedExams = new Exam[exams.length];
int size = 0;
for (Exam exam : exams) {
if (exam.getGrade() != 1) {
passedExams[size++] = exam;
}
}
return size == exams.length ?
exams :
Arrays.copyOf(passedExams, size);
}
由于所有考试都可能通过,因此使用exams
的长度初始化新数组passedExams
。如果所有检查都已通过,则返回原始数组。否则,我们使用Arrays.copyOf
调整passedExams
数组的大小,这将返回一个包含计数后的size
的新数组。
因为数组的大小是固定的,所以不可能删除元素。元素可以设置为null
,但不能删除。因此,不可能调整数组的大小。必须创建一个包含已过滤元素的新数组。
发布于 2018-10-21 04:26:28
private Exam[] filterPassedExams(Exam[] exams) {
int size = 0;
for(int i=0;i<exams.length;i++){
if(exams[i].getGrade() != 1)
size++;
}
Exam[] tmp = new Exam[size];
size=0;
for(int i=0;i<exams.length;i++){
if(exams[i].getGrade() != 1)
tmp[size++] = exams[i];
}
return tmp;
}
https://stackoverflow.com/questions/52909693
复制相似问题