gpt4 book ai didi

java - 没有找到条件时如何返回null?

转载 作者:行者123 更新时间:2023-12-02 09:39:23 25 4
gpt4 key购买 nike

当我的方法找不到它要查找的内容时,我试图返回 null。该方法正在寻找截止日期(参数)之前的最新提交。有人可以帮助我在参数日期之前没有提交时如何获取此信息吗?谢谢!

    // students is a LinkedList

@Override
public Submission getSubmissionBefore(String unikey, Date deadline) {
// TODO Implement this, ideally in better than O(n)

if (unikey == null || deadline == null) {
throw new IllegalArgumentException("Unikey or deadline was null");
}

Date tempDate = null;
int k = -1;

for (int i = 0; i < this.students.size(); i++) {
if (students.get(i).getUnikey().equals(unikey)) {
if (tempDate == null) {
tempDate = students.get(i).getTime();
k = i;
} else if (students.get(i).getTime().before(deadline) && students.get(i).getTime().after(tempDate)) {
k = i;
}
}
}

return students.get(k);
}

最佳答案

您的代码存在一些问题:

  • 您的第一个 if 条件是错误的;它将匹配任何提交的匹配unikey的内容,即使是在截止日期之后
  • 你的第二个else if也是错误的,因为你设置了k,但没有设置tempDate
  • return之前,您应该检查k是否仍然是-1,例如使用三元 return k == -1 ? null:students.get(k);然而:
  • 您可以使用 for-each 循环直接迭代提交,而不是迭代索引,从而使整个代码更加紧凑
  • 通过存储结果本身,您既不需要 k 也不需要 tempDate,并且不必检查索引是否仍然是 -1结束

使用上面的建议,您可以将循环简化为:

Submission res = null;
for (Submission sub : this.students) {
if (sub.getUnikey().equals(unikey)) {
if (sub.getTime().before(deadline) &&
(res == null || sub.getTime().after(res.getTime()))) {
res = sub;
}
}
}
return res;

或者使用 Java 8 Streams 的更紧凑的形式:

return this.students.stream()                        // iterate all students
.filter(s -> s.getUnikey().equals(unikey)) // get entries with matching key
.filter(s -> s.getTime().before(deadline)) // get entries before deadline
.max(Comparator.comparing(s -> s.getTime())) // from those, get the latest one
.orElse(null); // or null if none exists

关于java - 没有找到条件时如何返回null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46316404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com