0%
Optional e streams: os usos corretos e os abusos comuns

Optional e streams

takeWhile, toList, mapMulti, coletores úteis e os maus hábitos herdados do Java 8.

10-15 min

Optional e streams: os usos corretos e os abusos comuns

Optional e a API de streams chegaram juntos no Java 8, e esse é provavelmente o azar deles. Descobertos ao mesmo tempo, foram adotados como um estilo, e não como ferramentas, com duas consequências visíveis em quase todas as bases de código. De um lado, Optional por toda parte: como parâmetro de método, como campo de entidade, aninhados uns nos outros, serializados em APIs HTTP. Do outro, cadeias de streams de trinta linhas que substituem um laço de seis e que nenhum profiler conseguirá mais analisar de forma útil.

O problema não é teórico. Um Optional como campo de entidade quebra a serialização Java e faz frameworks de persistência falharem, porque Optional não implementa Serializable — foi uma decisão explícita de seus projetistas. Um optional.get() sem verificação prévia transforma um NullPointerException em um NoSuchElementException, o que não melhora absolutamente nada. E uma cadeia de stream mal posicionada em um laço crítico custa várias alocações por elemento, onde um for não fazia nenhuma. Esta lição revisita essas duas APIs, separando aquilo para que foram projetadas do que lhes foi imposto, e depois apresenta as adições posteriores ao Java 8.

Comentários

Os comentários são alimentados pelo GitHub Discussions

Conecte-se com o GitHub para participar da discussão

Link copiado!