¿Por qué findFirst () arroja una NullPointerException si el primer elemento que encuentra es nulo?

¿Por qué esto arroja unjava.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

El primer artículo enstrings esnull, que es un valor perfectamente aceptable. Además,findFirst() devuelve unOpcional, lo que tiene aún más sentido parafindFirst() para poder manejarnulls.

EDITAR: actualizado elorElse() ser menos ambiguo

Respuestas a la pregunta(5)

Su respuesta a la pregunta