2010-10-20 7 views
9

Je veux faire quelque chose comme çaparamètres multiples dans la liste

List<Integer, String, String> 

Je veux être en mesure de récupérer itérativement ou l'autre de ces trois paramètres. Comment puis-je m'y prendre? Merci

+0

http://stackoverflow.com/questions/3725703/how-to-store-more-than-one-string-in-a-map/3725732#3725732 liés – Bozho

+0

Pourquoi voulez-vous faire ? Généralement quand je vois ceci c'est un problème de conception (parlant de mes propres erreurs aussi bien que d'autres :-) – TofuBeer

Répondre

5

Qu'est-ce que vous avez besoin est une classe Tuple:

public class Tuple<E, F, G> { 
    public E First; 
    public F Second; 
    public G Third;  
} 

Ensuite, vous pouvez parcourir la liste des tuple et regarder chaque entrée dans le tuple.

List<Tuple<Integer, String, String> listOfTuple; 
for (Tuple<Integer, String, String> tpl: listOfTuple){ 
    // process each tuple 
    tpl.First ... etc 
} 
+0

Merci. Fonctionne parfaitement !!! – y2p

+0

@ yO2gO Je suis heureux d'avoir pu aider. – jjnguy

+0

@ yO2gO, vous devriez envisager d'accepter certaines réponses à vos questions afin qu'à l'avenir les gens sachent quelle réponse a résolu votre problème. – jjnguy

3

Vous pouvez créer une classe wrapper qui contient ces trois variables, puis stocker cet objet wrapper dans la liste.

Par exemple

public class ListWrapperClass { 
    private String firstStringValue; 
    private String secondStringValue; 
    private Integer integerValue; 

    public String getFirstStringValue() { 
     return firstStringValue; 
    } 

    public void setFirstStringValue(String firstStringValue) { 
     this.firstStringValue = firstStringValue; 
    } 

    public String getSecondStringValue() { 
     return secondStringValue; 
    } 

    public void setSecondStringValue(String secondStringValue) { 
     this.secondStringValue = secondStringValue; 
    } 

    public Integer getIntegerValue() { 
     return integerValue; 
    } 

    public void setIntegerValue(Integer integerValue) { 
     this.integerValue = integerValue; 
    } 
} 

puis utilisez List<ListWrapperClass>.

+1

Idéalement, bien sûr, cette classe aurait des noms significatifs pour elle-même et ses propriétés. – ColinD

+1

Oui, c'est vrai. Mais ce n'était malheureusement pas spécifié dans la question :) – Yrlec

+0

Pourquoi avez-vous les getters et les setters? Cela ajoute beaucoup trop de code inutile. – jjnguy

1

Vous pouvez utiliser un List<Object> puis lancer tout ce que vous extrayez en fonction de l'index, mais vous pouvez simplement envisager de créer une classe contenant ces trois éléments.

+0

Je ne recommande pas cette solution non générique. – jjnguy

+1

Moi non plus! :) Présentant juste d'autres alternatives. –

+0

Cela ne semble pas être le bon choix car les 3 valeurs ne peuvent pas toutes partager le même index et ne sont donc pas liées les unes aux autres comme elles devraient l'être. De plus, le manque de sécurité de type avec «Liste » devrait être évité autant que possible. – ColinD

Questions connexes