Por que findFirst () lança uma NullPointerException se o primeiro elemento encontrado é nulo?

Por que isso lança umjava.lang.NullPointerException?

List<String> strings = new ArrayList<>();
        strings.add(null);
        strings.add("test");

        String firstString = strings.stream()
                .findFirst()      // Exception thrown here
                .orElse("StringWhenListIsEmpty");
                //.orElse(null);  // Changing the `orElse()` to avoid ambiguity

O primeiro item emstrings énull, que é um valor perfeitamente aceitável. Além disso,findFirst() retorna umOpcional, o que faz ainda mais sentido parafindFirst() ser capaz de lidarnulls.

EDIT: atualizou oorElse() ser menos ambíguo.

questionAnswers(5)

yourAnswerToTheQuestion