时髦的问题。我有以下测试示例。我需要搜索一个集合并在 date1 的同一天收集所有事件。我在对方付费电话的末尾添加了一个 findAll 附件,因为我无法在集合中检查同一天。我看到错误“无法从空列表访问 last() 元素”检查 .last() 方法是否列表为空,即使在条件检查中使用 ?.last() 也是如此。如果我从对方付费电话中删除 findAll,它会正常工作,我不明白为什么。如果不在列表中,我总是使用 collect 调用创建一个新实例,而不是最后使用 findAll 附件进行此条件检查。为什么这会有所作为?Date date1 = new Date();List<Event> lEvents = test.collect("events").findAll{ d -> DateUtils.isSameDay(d.testdate, d1); }Event newEvent = lEvents?.last() ?: new Event();
1 回答
慕丝7291255
TA贡献1859条经验 获得超6个赞
错误消息是说列表是空的,而不是空的,所以?
in?.last()
没有任何区别。出于显而易见的原因,在尝试检索空列表的最后一个元素时,总是会抛出“空列表”异常。您findAll
正在过滤掉所有内容并返回一个空列表,这会触发错误。
你说你总是以这种方式测试一个空列表,所以不清楚你的其他代码如何能够last()
在不抛出的情况下调用一个空列表。你肯定有collect()
返回空列表的情况吗?
要解决此特定情况,您可以执行以下操作:
Event newEvent = (lEvents.size() > 0) ? lEvents.last() : new Event()
添加回答
举报
0/150
提交
取消