Uso de Java 8 opcional con Stream :: flatMap

El nuevo marco de transmisión Java 8 y sus amigos crean un código Java muy conciso, pero me he encontrado con una situación aparentemente simple que es difícil de hacer de manera concisa.

Considera unList<Thing> things y métodoOptional<Other> resolve(Thing thing). Quiero mapear elThings aOptional<Other>sy obtener el primeroOther. La solución obvia sería usarthings.stream().flatMap(this::resolve).findFirst(), peroflatMap requiere que devuelva una secuencia yOptional no tiene unstream() método (o es unCollection o proporcionar un método para convertirlo o verlo como unCollection)

Lo mejor que se me ocurre es esto:

things.stream()
    .map(this::resolve)
    .filter(Optional::isPresent)
    .map(Optional::get)
    .findFirst();

Pero eso parece terriblemente largo para lo que parece un caso muy común. Alguien tiene una mejor idea?

Respuestas a la pregunta(10)

Su respuesta a la pregunta