31 votes

Comparaison du cadre de la collection Google Guava vs Scala

Il existe de nombreux concepts communs:

  • collection immuable,
  • vue de la collection,
  • collection stricte / non stricte,
  • constructeurs de collections

mêmes modèles dans l'API Guava et Scala Collection. Alors, quelle est la difference? Les deux bibliothèques sont-elles cohérentes avec les modèles? La facilité d'extension est-elle suffisante?

J'aimerais donc entendre la comparaison de ces cadres de la part de quelqu'un qui les utilise tous les deux.

26voto

Kevin Wright Points 31665

Google Goyave est une fantastique bibliothèque, il n'y a pas de doute à ce sujet. Cependant, elle est implémentée en Java et souffre de toutes les restrictions que cela implique:

  • Immuable interface de collecte dans la bibliothèque standard
  • Pas de lambda littéraux (fermetures), donc il y a un peu lourd passe-partout à travers le SAM types de nécessaires pour, par exemple, les prédicats
  • beaucoup de chevauchement dans le type de spécifications, en particulier là où les génériques sont impliqués

La goyave a également exister dans la présence de Java standard de la collection de la bibliothèque, de sorte qu'il est rare qu'une 3ème partie les bibliothèques exposent goyave-compatible littéraux de fonction ou de faire usage de goyave spécifiques à des types de collection. Cela provoque une mauvaise adaptation d'impédance pour chaque tiers de la bibliothèque que vous utilisez. Par exemple, vous serez généralement voulez convertir retourné collections de ces bibliothèques à la appropriée de goyave immuable de la collection, surtout si vous travaillez dans un environnement multithread.

Scala collections ont un design qui est beaucoup mieux intégré dans la langue, vous trouverez largement utilisé tout au long de la scala de la bibliothèque standard et à la 3ème partie des produits mis en œuvre en Scala. Scala collections sont aussi immuables par défaut, si vous vous retrouvez avec beaucoup plus sûr de code qui ne nécessite pas une couche supplémentaire de protection de l'emballage.

Si vous pouvez utiliser Scala, puis le faire, il a de nombreux avantages au-delà des collections cadre. Si vous devez utiliser Java, la Goyave est un bon choix, surtout étant donné que la Scala collections ne sont pas particulièrement facile à utiliser, sans les fonctionnalités de langage que la Scala offre.

Dans un projet mixte, la Goyave, les collections sont parfaitement utilisables à partir de l'intérieur de la Scala, mais la langue fournit également des mécanismes vous permettant d'utiliser Java collections (y compris la Goyave, qui exposent les mêmes interfaces) comme s'ils étaient Scala propres collections.

7voto

paradigmatic Points 20871

J'utilise de goyave dans tous mes projets java maintenant. Il donne une belle tactile fonctionnel java collections avec des modèles similaires.

Toutefois, l'écriture fermetures en java moyenne définissant beaucoup de classe anonyme directement, ce qui est verbeux et ennuyeux.

Scala collections sont toujours de qualité supérieure en terme de design (avec la cascade des implémentations partielles en raison de traits) et de fonctionnalités. Il est facile de créer votre propre collection et de profiter de tous les avantages de la scala de collections par simple mise en place d'un petit ensemble de méthodes.

4voto

Landei Points 30509

Les autres ont déjà répondu à votre question, mais je pense que vous avez manqué une alternative intéressante, la bibliothèque fonctionnelle Java . Il ignore l'API Java Collection et fournit des collections immuables qui ressemblent et se comportent comme des collections Scala simplifiées.

3voto

Adam Gent Points 15055

J'ai utilisé de la Scala, Google collections et de F#. Dernièrement, j'ai été à l'aide de Google collections Itérateurs et négligent de ma part de la puissance de F# séquence d'expressions. Il semble Scala préfère la non-strict (paresseux) répertorie plus de itérateurs/séquences.

En F# et Google collections (voir google Itérateurs), vous pouvez transformer et de filtrer les itérateurs de la création d'un joli push pipeline de travail qui est représenté en tant que flux d'objets. Ce n'est pas que vous ne pouvez pas le faire en Scala son tout simplement pas commun. F# est un cool pipe opérateur pour le filtrage des itérateurs (séquences).

Par exemple, je m'attends à la Scala de rendement expression pour générer un itérateur comme Python (ou F# séquence de blocs) mais retourne une liste.

Les deux sont très similaires et Scala a d'énormes avantages en termes de vitesse et de la syntaxe mais lors de l'utilisation je me sens (à mon avis):

  • Google collections est de la Carte et de l'Itérateur concentré.
  • Scala est très Liste ciblée.

REMARQUE il semble Scala 2.8 a fait de gros changements dans ses collections (j'ai utilisé une ancienne version de Scala).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X