DEV Community

Java Efetivo (livro)
Java Efetivo (livro)

Posted on

1

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.

Image description

Image description

Image description

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.

EXEMPLOS:
PowerSet e PowerSetDemo.java no repo

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

Top comments (0)

Hostinger image

Get n8n VPS hosting 3x cheaper than a cloud solution

Get fast, easy, secure n8n VPS hosting from $4.99/mo at Hostinger. Automate any workflow using a pre-installed n8n application and no-code customization.

Start now

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay