Я новичок в функциональном программировании в java и задаюсь вопросом, как я должен кодировать, чтобы избежать NPE в (например) этой операции:
myList.stream()
.reduce((prev, curr) -> prev.getTimestamp().isAfter(curr.getTimestamp()) ? prev : curr);
.get().getTimestamp();
Мое намерение состоит в том, чтобы найти временную метку самого нового объекта в списке. Предложения о том, как лучше собрать последний элемент, очень приветствуются, но мой главный вопрос здесь на самом деле, почему это работает.
В документации говорится, что функция выбрасывает NullPointerException
", если результат сокращения равен нулю:
Это нормально, но я не совсем понимаю, почему я не получаю NullPointerException
, когда этот код запускается со списком, содержащим только один элемент. Я ожидал, что prev
будет нулевым в таком случае. Я попробовал отладку, но кажется, что она перешагивает все лямбда-выражения, когда есть только один элемент.