|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
![]() ![]() Thierry Leriche-DessirierInscription : octobre 2007 Messages : 2 141 ![]() |
Les Collections Java ont un peu plus d'une douzaine d'années d'existence et s'imposent comme une des plus importantes APIs du monde Java. De nombreux framework en utilisent les fonctionnalités et les étendent. C'est notamment le cas de Google-Collections qui ajoute des évolutions intéressantes comme les Prédicats, les objets Multi ou Bi, les immutables, etc. Ce document est un point de départ à la découverte des éléments clés de Google-Collections.
Que pensez-vous de cet article ? Article : http://thierry-leriche-dessirier.dev...e-collections/ |
|
10
|
|
|
#2 |
|
Membre éprouvé
![]() Manuel SIREDéveloppeur Java Inscription : avril 2004 Messages : 264 ![]() |
Salut,
Merci pour la découverte de cette API que je ne connaissais pas (je vais l'étudier de plus près et peut-être l’intégrer à mes prochain projets). ![]() J'ai trouvé de petite coquilles : les sources ne sont pas disponibles (cela dit les exemples sont suffisamment simples pour que ce ne soit pas un problème), et dans la partie sur les précondition le code Code :
this.age = checkArgument(0 <= age, "Un age ne peut pas être négatif"); |
|
|
00
|
|
|
#3 |
|
Membre confirmé
![]() Inscription : mai 2007 Messages : 242 ![]() |
Bonjour,
c'est un article intéressant, j'ai appris quelque chose, et je pense que je vais m'en servir. ça rappelle très largement les jakarta-commons colllection pour les convertisseur et prédicate, mais c'est en Java 5 contrairement aux commons (ce qui m'a un poil ennuyé sur mon projet actuel). petites critiques de formes (c'est tout ce qui reste quand le fond est ok - "VIII. Functionnal-collections": un seul n - "On pourrait croire que ImmutableMap.of() est une eliypse mais pas du tout." : je n'ai pas compris. (ça existe eliypse ?) - "Vector" : on n'a pas dit qu'on utilisai ArrayList maintenant? Vector ça fait très Java 1.1.x |
|
|
00
|
|
|
#4 |
![]() ![]() Thierry Leriche-DessirierInscription : octobre 2007 Messages : 2 141 ![]() |
@gailuris : j'avais oublié de le corriger en effet. Merci de me l'avoir signalé.
@deltree : J'ai utilisé les arraylists dans tout le reste de l'article alors je voulais varier un peu, histoire de dire que ça ne se limite pas aux arrays. |
|
00
|
|
|
#5 |
|
Membre Expert
![]() ![]() Chris CamelArchitecte de système d'information Inscription : novembre 2006 Messages : 1 242 ![]() |
A noter que google-collections est maintenant un sous-ensemble du projet guava (http://code.google.com/p/guava-libraries/).
|
|
|
00
|
|
|
#6 |
![]() ![]() Thierry Leriche-DessirierInscription : octobre 2007 Messages : 2 141 ![]() |
@Tommy31 : Effectivement c'est ce que je me suis contenté de dire dans l'article car je souhaitais me concentrer sur les collections et ce qui gravite autour. Guava est très intéressant aussi, mais G-Collections est le "module" le plus important. Toutefois je prévoie de compléter l'article d'ici quelques temps (et/ou de faire un article à part) avec un chapitre sur guava.
|
|
00
|
|
|
#7 | ||||||
|
Membre Expert
![]() Inscription : mai 2004 Messages : 1 253 ![]() |
Bonjour,
Très bon article dans l'ensemble qui couvre un bon gros 50% de la bibliothèque, mais 90% des besoins des utilisateurs finaux. Cependant j'ai plusieurs remarques : * Vu l'actualité galopante de Guava, je crois qu'il est bien mieux de réellement parler de Guava dans tout l'article plutôt que de google-collections, dans lequel déjà plusieurs bugs ont été trouvés mais fixés seulement dans Guava. * Pourquoi parler de Vector ? Si Vector a été "oublié" dans <s>google-collection</s> guava, c'est pour une raison particulière. Vector ne doit plus être utilisé du tout. Pour arriver à un Vector, il suffit de faire ceci : Code :
Code :
* Dans l'exemple sur le joiner, pourquoi compliquer la vie de l'utilisateur avec des StringBuilder ? Je ne crois pas qu'il y a de "cas précis" dans ce cas : c'est tout simplement le cas général. Le code suivant fait exactement la même chose et est plus court : Code :
À noter également la "fraternité" entre Guava et Glazed List. Tout ce qui manque dans Guava se trouve généralement dans le projet Glazed List : les développeurs de Guava ne veulent pas faire doublon avec Glazed List. |
||||||
|
|
10
|
|
|
#8 | |
![]() ![]() Thierry Leriche-DessirierInscription : octobre 2007 Messages : 2 141 ![]() |
@dingoth Très bonnes remarques.
Pour le Vector, je pense que c'est une bonne part de souvenir de mes débuts en Java... J'ai du mal à lâcher mon premier amour ;-) Je trouve ton exemple de liste non synchro qui devient synchro très intéressant. C'est une technique que je n'ai pas l'habitude d'utiliser mais j'en vois directement tous les avantages par rapport à utiliser un vector (synchro) dès l'affectation. En tous cas, je viens de remplacer les vectors par des arraylists pour vous faire plaisir ;-) Pour le HashMultiSet, effectivement je me suis emballé un peu là : je ne sais pas ce qui m'a pris lol. Surtout que je disais bien le contraire juste au dessus : Citation:
Pour le joiner, en fait, je voulais mettre un exemple non trivial, qui justifie d'utiliser un joiner un peu complexe au lieux de passer directement par le jdk, mais je ne trouve pas d'exemple parlant (sans en faire des pages et des pages) Bon bon, ok ok je vais parler de guava et de glazed dans la prochaine version. |
|
|
00
|
|
|
#9 |
|
Membre confirmé
![]() Ingénieur développement logiciels Inscription : mai 2009 Messages : 89 ![]() |
Merci pour cet article.
Cependant, j'ai du mal à voir le plus apporté comparé aux common-collections d' Apache ? |
|
10
|
|
|
#10 |
|
Membre Expert
![]() ![]() Chris CamelArchitecte de système d'information Inscription : novembre 2006 Messages : 1 242 ![]() |
Le plein support des generics !
|
|
|
10
|
|
|
#11 |
|
Membre Expert
![]() Inscription : mai 2004 Messages : 1 253 ![]() |
Guava est également :
* 100% compliant avec l'api Collections de Java (parfois apache-commons prend des libertés). * en développement là où commons colletions semble être uniquement en maintenance Moi, ça me suffit |
|
|
10
|
|
|
#12 |
![]() ![]() Inscription : décembre 2006 Messages : 1 878 ![]() |
Jolie article
J'ai deja rencontré la pluspart de ses collections dans plusieurs projets tels que apache-commons, jersey, geotk/geoapi ... il n'y a pas grand merite si ce n'est le nom qui en fait de la publicité a lui seul. Ce n'est pour la plupart que du sucre syntaxique plutot dangereux pour les non-avertis, particulierement l'ecriture newYYY qui me semble un tres mauvais choix. Il manque aussi beaucoup de choses, comme les sequences, CacheMap, DisjointSet, CodeList, FrequencySortedSet, RangeSet, NotifiedList ... etc ... C'est encore loin d'etre complet. la majorité de ce que je viens de citer est dans le projet GeotoolKit avec une 40ene de classes utilitaire sur les collections qui remonte pour certaines a pres de 8ans ... et pourtant ce n'est pas son objectif. De la a dire que cette librairie offre quelque chose de nouveau ... faut arreter, c'est une Nième compilation de code deja bien réchauffé ![]() Ne vous jetez pas sur tout ce qui a le nom g.... ps : on ecrit "public static" et non "static public"
__________________
Systèmes d'Informations Géographiques- Projets : GeoAPI GeotoolKit PuzzleGISPour un monde sans BigBrother IxQuick ni censure RSF |
|
|
10
|
|
|
#13 |
![]() ![]() Thierry Leriche-DessirierInscription : octobre 2007 Messages : 2 141 ![]() |
@eclesia : Effectivement il existe d'autres frameworks qui proposent sensiblement la même chose, parfois mieux, parfois pire... Pour le coup, cet article ne présente pas ces frameworks mais Google-Collections, qui répond à la "plupart" des problèmes courants.
Il est vrai que si on utilise déjà un des frameworks cités, le passage à Google-Collections est moins intéressant. Dans une prochaine version de l'article, je prévoie d'ajouter un chapitre pour comparer Google-Collections avec les autres frameworks, notamment commons-collections et ceux que tu cites. |
|
10
|
|
|
#14 | |
|
Membre Expert
![]() Inscription : mai 2004 Messages : 1 253 ![]() |
Citation:
Ce n'est nullement dangereux comme code. Cela respecte parfaitement les bonnes pratiques standard de Java (voir le livre Effective Java, par exemple) afin de pallier au problème des constructeurs. Edit: Guava connait CacheMap (voir MapMaker), DisjointSet (MapDiff), FrequencySortedSet (Ordering+ Multiset implementation), et les autres, je les connais pas, donc j'en parle pas. Enfin, le nom Guava a été choisi pour remplacer google-collections afin de justement ne pas faire jouer le nom G..... Bref, j'ai l'impression que tu as un a-priori assez fort contre la bibliothèque s'en t'être penché dessus un minimum. |
|
|
|
20
|
|
|
#15 |
![]() ![]() Thierry Leriche-DessirierInscription : octobre 2007 Messages : 2 141 ![]() |
Et d'ailleurs j'en parle dans l'article : On notera que l'idée des déclarations simplifiée avait déjà été proposée par Josh Bloch dans son livre "Effective Java 2" et devrait arriver dans Java 7 (ou 8)
|
|
10
|
|
|
#16 | |||||||
![]() ![]() Inscription : décembre 2006 Messages : 1 878 ![]() |
Citation:
Code :
Citation:
Citation:
- sequence : une classe proxy qui itere sur plusieurs collections a la fois, succesive sur chaque collection qu'elle encapsule. - codelist : l'equivalent d'un enum a taille variable, ca a été créé dans le cas des normes ISO/OGC qui definissent des valeurs possibles que certain profils etendent avec de nouvelles valeurs. - FrequencySortedSet : un set qui ordonne ses elements selon leur frequence, plus on fait de add d'un element plus il remonte dans l'ordre. - RangeSet : une collection d'interval, de date a date, nombre a nombre qui se fusionne automatiquement. - NotifiedList : liste concurrente qui envoit des evenements lors d'ajout, suppression ... utile dans le cas ou l'on travail avec des listes vivantes. Citation:
Citation:
D'ailleur je remarque qu'ils ont dupliqué aussi le travail fait dans JSR-275 Unit, et on fait leur propre systeme d'unité réduite au minimum. Pour répondre a ta question tres honnetement : oui je n'aime pas G... pour avoir saccagé a deux reprises mon domaine de travail (la cartographie), - avec une specification imposé de force a l'OGC (le fameux format KML) - une incompétence avérée pour avoir créé une définition de projection (en gros une formule permettant de calculer la position d'un point sur la planete vers un point sur un plan) et n'etre meme pas capable de l'appliquer correctement dans ses logiciels. Comme bien sur tout le monde se jete aveuglement sur les outils G... l'erreur est partout désormais et c'est trop tard pour la rectifier (ont ilsmeme essayé) donc on a une exception sur quelques milliers de projection qu'il faudra prendre en compte a chaque fois. Ajouter a cela que cette société a tendance a dupliquer tout ce qui lui plait, a ne pas se priver pour nous traquer et se faire de l'argent en vendant nos petites habitudes. Je mettais G.. au meme niveau que Sun en terme d'innovation et d'ouverture, mais c'etait avant de decouvrir les bassesses de cette société. Autant avec Microsoft / Apple / Oracle les intentions sont clairs, autant avec G... c'est de la mesquinerie. Se sont des développeurs comme les autres, leurs projets ne sont pas mieux non plus.
__________________
Systèmes d'Informations Géographiques- Projets : GeoAPI GeotoolKit PuzzleGISPour un monde sans BigBrother IxQuick ni censure RSF |
|||||||
|
|
00
|
|
|
#17 |
![]() ![]() Thierry Leriche-DessirierInscription : octobre 2007 Messages : 2 141 ![]() |
Petite màj : ajout du builder pour les ConcurrentMap
|
|
00
|
|
|
#18 |
![]() ![]() Thierry Leriche-DessirierInscription : octobre 2007 Messages : 2 141 ![]() |
Màj : Ajout du pattern Converter de Spring à combiner avec Lists.transform()
|
|
00
|
|
|
#19 |
![]() ![]() Thierry Leriche-DessirierInscription : octobre 2007 Messages : 2 141 ![]() |
Màj : Ajout de la syntaxe Diamons à titre indicatif.
|
|
00
|
|
|
#20 |
![]() ![]() Thierry Leriche-DessirierInscription : octobre 2007 Messages : 2 141 ![]() |
màj : la méthode "transform()" fonctionne un peu comme un proxy. C'est hyper important à savoir pour ne pas avoir de mauvaise surprise. La transformation donne une vue qui n'est réellement convertie que sur besoin.
http://thierry-leriche-dessirier.dev...ections/#LIV-C |
|
00
|
Copyright © 2000-2013 - www.developpez.com