IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Affichage des résultats du sondage: Êtes-vous pour ou contre cette proposition ?

Votants
262. Vous ne pouvez pas participer à ce sondage.
  • Pour

    112 42,75%
  • Contre

    150 57,25%
Collection et Stream Java Discussion :

JDK 7: Proposition 9 : Notation de tableau pour List et Map -> Intégrée [Débat]


Sujet :

Collection et Stream Java

  1. #1
    Expert éminent sénior


    Profil pro
    Inscrit en
    Mai 2003
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 3 240
    Points : 11 101
    Points
    11 101
    Par défaut JDK 7: Proposition 9 : Notation de tableau pour List et Map -> Intégrée
    Aujourd'hui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void swap(List<String> list, int i, int j) {
        String s1 = list.get(i);
        list.set(i, list.get(j));
        list.set(j, s1);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Map<Input,Output> cache = …;
    Output cachedComputation(Input in) {
        Output out = cache.get(in);
        if (out == null) {
            out = computation(input);
            cache.put(in, out);
        }
        return out;
    }
    Demain :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void swap(List<String> list, int i, int j) {
        String s1 = list[i];
        list[i] = list[j];
        list[j] = s1;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Map<Input,Output> cache = …;
    Output cachedComputation(Input in) {
        Output out = cache[in];
        if (out == null) {
            out = computation(input);
            cache[in] = out;
        }
        return out;
    }

  2. #2
    Membre expérimenté Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Points : 1 635
    Points
    1 635
    Par défaut
    Bonsoir

    Et comment ça serait implémenté derrière ? C'est une redéfinition de l'opérateur [] ou c'est une fonctionnalité qui se limite aux listes et map ?

    Dans le cas de la première réponse : pourquoi pas ?
    Pour la deuxième réponse : POUR !!!

    Merci

    Yann

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Points : 327
    Points
    327
    Par défaut
    J'ai voté contre, non pas que le principe me déplaise, mais au niveau lecture/compréhension du code, ça deviendrai chaud ... Surtout dans l'exemple ci-dessus, le put() de Map permet d'ajouter OU de remplacer un couple clé/valeur, et dans le cas de l'ajout, ça deviendrait étrange (pour moi) de l'écrire de cette façon...

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Pour, à condition que cela implique l'implémentation d'une interface spécifique (comme ce fut le cas pour le "for each" avec Iterable).

    a++

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut
    Ca sent le melange des tableaux à la lecture du code pour peu que deux variables ai des noms proches....

    Je m'abstient car pas vraiment pour mais je peux pas dire que je suis contre.
    En C on peut faire de la redefinition d'operateur....

  6. #6
    Membre actif Avatar de austin P.
    Inscrit en
    Juin 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Juin 2004
    Messages : 182
    Points : 239
    Points
    239
    Par défaut
    contre

    la lecture du code n'est pas simple

  7. #7
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Pour, par contre je ne comprends pas le bémol de adiGuba...
    Pour la permutation dans la liste, il me semble intéressant de pouvoir faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Object tmp = list[i];
    list[i] = list[j];
    list[j] = tmp;
    A ce sujet, à quand la méthode swap(...) ?

  8. #8
    Membre actif
    Avatar de bobuse
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 232
    Points : 269
    Points
    269
    Par défaut
    Citation Envoyé par Napalm51 Voir le message
    Surtout dans l'exemple ci-dessus, le put() de Map permet d'ajouter OU de remplacer un couple clé/valeur, et dans le cas de l'ajout, ça deviendrait étrange (pour moi) de l'écrire de cette façon...
    Tu as failli m'avoir, mais je pense que tu te méprends ! Dans une map, tu n'as qu'une clé pour une valeur. Ainsi lors d'un put pour ajouter un couple, si la clé est déjà présente, la valeur présente est remplacé par la nouvelle. Non ?

    Citation Envoyé par adiGuba Voir le message
    Pour, à condition que cela implique l'implémentation d'une interface spécifique (comme ce fut le cas pour le "for each" avec Iterable).
    Hmmm, effectivement
    Ça devient intéressant, mais est-ce que ce n'est pas un peu risqué ?
    Boarf, je trouve pas d'exemple en fait, et c'est pas pire que le foreach

    Donc zou, pour !!

  9. #9
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Pour, par contre je ne comprends pas le bémol de adiGuba...
    En fait je souhaiterais que cela ne se limite pas aux List et Map, mais que cela puisse être utilisé pour n'importe quelle classe qui implémenterait une interface spécifique.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public interface IndexedType<E> {
    	public E get(int index);
    	public E set(int index,  E element);
    }
    Toutes les classes qui implémentent cette interface pourront être utilisées avec les crochets, sans pour autant implémenter List.

    Bien sûr l'interface List étendra cette interface (cela ne posera aucun problème car elle comporte déjà ces méthodes) afin que cela fonctionne sur toutes les Lists...




    De la manière à ce qui a été fait pour le "for each". En réalité le "for each" n'attend pas une Collection mais un Iterable, qui définit seulement la méthode iterator().

    cela permettrait une gestion plus souple...


    a++

  10. #10
    Membre éclairé Avatar de bassim
    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Février 2005
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 666
    Points : 695
    Points
    695
    Par défaut
    ça me rappelle le Pascal

  11. #11
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 108
    Points : 3 203
    Points
    3 203
    Par défaut
    Contre, je preferes la syntaxe actuelle qui rappelle bien plus qu'on manipule un object. redefinir les methodes put/get ... devient ambigue si on se met a manipuler les collections comme des tableaux.

  12. #12
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Contre,

    On se dirige un peu trop vers de la surcharge d'opérateurs et je hais ce truc.
    Mauvaise lecture: bonjour pour faire le lien avec la javadoc correspondant a l'appel par exemple.
    Gain: que du sucre syntaxique, n'apporte vraiment rien d'autre.

    Bulbo

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Points : 327
    Points
    327
    Par défaut
    Citation Envoyé par bobuse Voir le message
    Tu as failli m'avoir, mais je pense que tu te méprends ! Dans une map, tu n'as qu'une clé pour une valeur. Ainsi lors d'un put pour ajouter un couple, si la clé est déjà présente, la valeur présente est remplacé par la nouvelle. Non ?
    Oui c'est cela, c'est ce que je disais, enfin peut être pas en bons termes :p Mais justement remplacer le put() par un simple map[clé] = valeur me fait peur dans le cadre d'une nouvelle clé.

  14. #14
    Membre actif
    Avatar de bobuse
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 232
    Points : 269
    Points
    269
    Par défaut
    Citation Envoyé par Napalm51 Voir le message
    Oui c'est cela, c'est ce que je disais, enfin peut être pas en bons termes :p Mais justement remplacer le put() par un simple map[clé] = valeur me fait peur dans le cadre d'une nouvelle clé.
    C'est exactement la même chose que pour une liste en fait. Dans le cas d'une liste ou d'un array, la clé est l'indice, si tu affectes un élément à un indice ou il en a déjà un, tu remplaces l'ancien, c'est tout.

  15. #15
    Membre éprouvé Avatar de Jester
    Inscrit en
    Septembre 2003
    Messages
    813
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 813
    Points : 1 057
    Points
    1 057
    Par défaut
    La surcharge d'opérateur , on va y venir ;-)

  16. #16
    Membre actif
    Avatar de bobuse
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 232
    Points : 269
    Points
    269
    Par défaut
    Citation Envoyé par Jester Voir le message
    La surcharge d'opérateur , on va y venir ;-)
    Non, je ne pense pas. Ici il ne s'agit pas de surcharge d'opérateur, mais de syntaxe.

  17. #17
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bobuse Voir le message
    Ici il ne s'agit pas de surcharge d'opérateur, mais de syntaxe.
    Ben c'est quand même de la surcharge d'opérateur : pour l'opérateur [] sur des liste appeler get() ou set() selon le contexte...


    Mais bon cela reste relativement bien encadré et on est loin des surcharges dans tous les sens qu'il est possible de faire en C++

    Mais c'est sûr que cela pourrait avoir des effets indésirables (l'opérateur + dans une boucle en est un exemple frappant).

    a++

  18. #18
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Enfin dans une version complêtement différente et orientée TableModel serait de pouvoir faire çà sur des beans dont on définirait l'ordre à grand coup d'annotations.

    Au niveau des listes çà me semble un peu plus foireux au niveau lecture de code, ne plus savoir si j'ai une Collection ou un tableau 100 lignes plus bas...

  19. #19
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 867
    Points : 22 921
    Points
    22 921
    Billets dans le blog
    52
    Par défaut
    Oui MAIS non seulement il faut integrer une interface Indexable, mais il faudra egalement ammender la doc de List (avertissement que les perfs peuvent varier suivant le type de liste) et LinkedList (precision en insistant LOURDEMENT sur la lenteur des acces via [] - similaires a ceux de get() et set()). De meme la doc de Map (avertissement que les resultats peuvent varier suivant le type de map) et HashMap (precision pour indiquer que deux appels successifs a myMap[i] peuvent ne pas retourner le meme element si un nouvel element a ete insere dans la map car l'ordre de stockage varie en fonction de la methode de hashage) doit etre ammendee. Quant a TreeMap, l'indice sera fonction de l'ordre de tris, j'imagine.
    Etc... Donc a manier avec precaution.

  20. #20
    En attente de confirmation mail

    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 766
    Points : 1 267
    Points
    1 267
    Par défaut
    J'aimerais plutot un truc qui permet d'ajouter directement des objets à la création.
    Comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList list=new ArrayList(){obj1, obj2, obj3};

Discussions similaires

  1. Réponses: 78
    Dernier message: 27/08/2009, 19h29
  2. [HTML] Tableau pour l'enregistrement des données
    Par ghyosmik dans le forum Balisage (X)HTML et validation W3C
    Réponses: 13
    Dernier message: 01/11/2005, 15h28
  3. Problème tableau pour une requête
    Par LE NEINDRE dans le forum Langage
    Réponses: 2
    Dernier message: 07/10/2005, 20h21
  4. [VB.NET] Quel objet tableau pour une recherche indexée ???
    Par Kitano dans le forum Windows Forms
    Réponses: 7
    Dernier message: 02/09/2004, 09h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo