我是新來的Java的功能編程,並想知道我應該怎麼代碼,以避免NPE在(例如)此操作:呼叫流()降低()名單上只有一個元素
myList.stream()
.reduce((prev, curr) -> prev.getTimestamp().isAfter(curr.getTimestamp()) ? prev : curr);
.get().getTimestamp();
我的意圖是在列表中找到最新對象的時間戳。關於如何更好地收集最後一個元素的建議非常受歡迎,但我的主要問題實際上是爲什麼這是有效的。
的文件說,該函數拋出一個NullPointerException
「如果減少的結果爲空」:
這是確定的,但我不太明白的是爲什麼我不當這個代碼運行一個只包含一個元素的列表時,得到一個NullPointerException
。我預計prev
在這種情況下爲空。我嘗試過調試,但似乎只有一個元素時纔會遍歷整個lambda表達式。
請注意,這將只返回最新的時間戳,而不是具有最新時間戳的對象。 – skiwi 2014-11-25 16:58:23
謝謝,我知道這一點,時間戳是我想要的。 – aweibell 2014-11-27 23:03:24