Item 47: Dê preferência à Collection como um tipo de retorno em vez da Stream

Preferência por Collection:

  • Em métodos que retornam sequências de elementos, dê preferência a Collection como tipo de retorno em vez de Stream.
  • Collection permite iteração com loops for-each e processamento com streams, oferecendo maior flexibilidade para os usuários.

Interfaces de Retorno Comuns:

  • Antes do Java 8, Collection, Set, List, Iterable e arrays eram os tipos de retorno mais comuns.
  • Iterable era usada para iteração simples e arrays para valores primitivos ou sequências com requisitos de execução rigorosos.

Impacto do Java 8:

  • A introdução das streams no Java 8 complicou a escolha do tipo de retorno adequado.
  • Apesar das streams, a iteração com loops for-each continua relevante e importante.

Problemas com Streams:

  • Se uma API retorna apenas uma stream, usuários que preferem iteração com loops for-each ficam frustrados.
  • Stream não estende Iterable, dificultando o uso em loops for-each.

Soluções para Iteração em Streams:

  • Não há uma solução ideal para adaptar streams para iteração direta.
  • Pode-se escrever métodos adaptadores, mas o código resultante é muitas vezes confuso e menos eficiente.

Retornando Sequências:

  • Se a sequência será usada apenas em streams, retornar uma Stream é adequado.
  • Se a sequência será usada apenas para iteração, retorne uma Iterable.
  • Para APIs públicas, que precisam atender ambos os casos, Collection ou um subtipo é geralmente a melhor escolha.

Uso de Coleções Especiais:

  • Se a sequência for grande demais para ser armazenada na memória, considere implementar uma coleção customizada.
  • Por exemplo, para representar conjuntos potência, uma coleção customizada pode ser mais adequada.

Trade-offs de Implementação:

  • Em alguns casos, pode ser mais fácil implementar uma stream do que uma coleção customizada.
  • No entanto, streams não são sempre a melhor solução, especialmente quando a iteração seria mais natural.

Considerações de Desempenho:

  • Implementações customizadas de Collection podem ser mais rápidas que streams, mas são mais verbosas.
  • Adaptadores de Stream para Iterable podem impactar negativamente o desempenho.

Conclusão:

  • Ao retornar uma sequência de elementos, considere as necessidades dos usuários de streams e iteração.
  • Retorne uma Collection sempre que possível, e use streams ou iteradores apenas quando necessário.
  • Uma futura extensão de Stream para Iterable pode resolver algumas dessas questões.

Discover more from Coursity

Subscribe to get the latest posts sent to your email.

Leave a Comment

Your email address will not be published. Required fields are marked *

Discover more from Coursity

Subscribe now to keep reading and get access to the full archive.

Continue reading

Scroll to Top
Mortal kombat legends battle of the realms 2021 1080p yts yify – fzmovies 2023. The complete web developer course 2.