時髦的問題。我有以下測試示例。我需要搜索一個集合并在 date1 的同一天收集所有事件。我在對方付費電話的末尾添加了一個 findAll 附件,因為我無法在集合中檢查同一天。我看到錯誤“無法從空列表訪問 last() 元素”檢查 .last() 方法是否列表為空,即使在條件檢查中使用 ?.last() 也是如此。如果我從對方付費電話中刪除 findAll,它會正常工作,我不明白為什么。如果不在列表中,我總是使用 collect 調(diào)用創(chuàng)建一個新實例,而不是最后使用 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條經(jīng)驗 獲得超6個贊
錯誤消息是說列表是空的,而不是空的,所以?
in?.last()
沒有任何區(qū)別。出于顯而易見的原因,在嘗試檢索空列表的最后一個元素時,總是會拋出“空列表”異常。您findAll
正在過濾掉所有內(nèi)容并返回一個空列表,這會觸發(fā)錯誤。
你說你總是以這種方式測試一個空列表,所以不清楚你的其他代碼如何能夠last()
在不拋出的情況下調(diào)用一個空列表。你肯定有collect()
返回空列表的情況嗎?
要解決此特定情況,您可以執(zhí)行以下操作:
Event newEvent = (lEvents.size() > 0) ? lEvents.last() : new Event()
添加回答
舉報
0/150
提交
取消