首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在java中从对象数组中删除对象

如何在java中从对象数组中删除对象
EN

Stack Overflow用户
提问于 2018-10-21 04:08:44
回答 4查看 203关注 0票数 2

我需要创建一个方法,该方法删除具有变量grade=1的对象数组中的所有对象,并返回“调整大小”的对象数组。

这些对象如下所示:

代码语言:javascript
复制
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;}

该方法需要如下所示:

代码语言:javascript
复制
private Exam[] filterPassedExams(Exam[] exams) { ...}

任何关于如何在不使用列表的情况下解决问题的帮助或建议在我们还没有学习列表的课程中都是很棒的,所以我们不能真正使用它们(但我也想知道解决方案,如果它更快,以便将来使用)。

EN

回答 4

Stack Overflow用户

发布于 2018-10-21 04:12:45

我会流式传输数组,过滤需要保留的检查,然后将流转换回数组:

代码语言:javascript
复制
private Exam[] filterPassedExams(Exam[] exams) {
    return Arrays.stream(exams).filter(e -> e.grade.intValue() != 1).toArray(Exam[]::new);
}
票数 1
EN

Stack Overflow用户

发布于 2018-10-21 05:52:54

我的方法是迭代exams,并立即将通过的检查收集到一个新的数组passedExams

代码语言:javascript
复制
  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,但不能删除。因此,不可能调整数组的大小。必须创建一个包含已过滤元素的新数组。

票数 1
EN

Stack Overflow用户

发布于 2018-10-21 04:26:28

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52909693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档