2015-08-27 1 views
0

Je veux passer plus d'articles avec les types suivants de données:Java quelle structure de données utiliser pour Liste avec plus de types de données différents?

OneListItem = (Integer, String, Intent); 

Alors:

OneListItem.add(1,"Hello", IntentToPass); 
OneListItem.add(2,"Hello", IntentToPass); 
OneListItem.add(3,"Hello", IntentToPass); 

et appel de méthode qui est en train de traiter les données fournies par cette façon:

nh.addNotification(OneListItem); 

Quelles sont les données la structure est la meilleure à utiliser pour cela (la structure de données sera toujours la même) et comment la définir?

J'ai essayé quelque chose comme ça, mais sans chance:

List<String, Integer, Intent> li = new ArrayList<String, Integer, Intent>; 

Merci pour tout conseil.

Répondre

0

La méthode la plus simple consiste à créer une classe pour le type d'informations que vous tentez de stocker. Par exemple:

class Person { 
    public final String name; 
    public final int age; 
    public final boolean gender; 
    public Person(String name, int age, boolean gender) { 
     this.name = name; 
     this.age = age; 
     this.gender = gender; 
    } 
} 

Et la liste serait utilisée comme ceci:

ArrayList<Person> people = new ArrayList<>(); 
people.add(person1); 
people.add(person2); 
people.add(person3); 

L'utilisation des public final variables membres pour la classe « conteneur » pourrait également être remplacé par variables membres public et non final, ce qui leur permet d'être modifiés. Tout dépend si vous voulez que la classe soit immuable ou non et comment vous voulez manipuler les données. Pour une simple classe "container" comme celle-ci, je ne suis pas d'accord avec les getters/setters car c'est vraiment un codage inutile. Utilisez simplement les variables public non final. Cependant, l'utilisation de getters ou de setters peut être nécessaire pour implémenter la synchronisation ou un autre traitement lors de l'accès à la classe.

2

J'enveloppez cela et créer ma propre classe:

class MyClass { 
    private String str; 
    private Integer i1; 
    private Integer i2; 

    // ctrs, getters, setters 
} 

Et puis simplement:

List<MyCLass> li = new ArrayList<>(); 
0

Vous pouvez utiliser MultiKeyMap des communes apache ou vous pouvez définir votre propre classe personnalisée qui contiendra les données dont vous avez besoin.

0

Faire une classe:

public class MyNotificationItem { 
    private final int first; 
    private final String second; 
    private final int third; 

    public MyNotificationItem(int first, String second, int third) { 
     this.first = first; 
     this.second = second; 
     this.third = third; 
    } 

    public int getFirst() { 
     return first; 
    } 

    public String getSecond() { 
     return second; 
    } 

    public int getThird() { 
     return third; 
    } 
} 
0

Il n'y a pas une représentation adéquate pour que, dans la bibliothèque standard. Le plus simple serait de créer votre propre classe puis de travailler avec un List<Triple<String,Integer,Intent>>.

public final class Triple<A,B,C>{ 
    public final A _1; //public final to avoid getters on example 
    public final B _2; 
    public final C _3; 

    public Triple(A a, B b, C c){ 
    this._1 = a; 
    this._2 = b; 
    this._3 = c; 
    } 
} 

//usage would be like this 
List<Triple<String, Integer, Intent>> li = new ArrayList<>; 
Triple<String, Integer, Intent> t = new Triple(1,"Hello", IntentToPass); 
li.add(t); 

Ou, vous pouvez utiliser une bibliothèque externe, par exemple the Triple de Apache commons

0
public class MyNotificationItem { 
    private final int first; 
    private final String second; 
    private final int third; 

    public MyNotificationItem(int first, String second, int third) { 
     this.first = first; 
     this.second = second; 
     this.third = third; 
    } 

    public int getFirst() { 
     return first; 
    } 

    public String getSecond() { 
     return second; 
    } 

    public int getThird() { 
     return third; 
    } 
} 

class OneListItem extends ArrayList<MyNotificationItem>{ 
    public void add(Integer i, String j, Intent k)){ 
     add(new MyNotificationItem(i, j, k)); 
    } 
} 
1

En fait ... vous pouvez aussi faire de cette façon, c'est beaucoup plus semblable à ce que vous avez demandé.AVERTISSEMENT: Je ne suggère pas de l'utiliser, je dis seulement qu'il est possible de le faire.

Intent intent; 

ArrayList<Object[]> objects = new ArrayList<Object[]>(); 
objects.add(new Object[]{1,"Hello", intent}); 
objects.add(new Object[]{2,"Hello", intent}); 
objects.add(new Object[]{3,"World", intent}); 

Log.d("OUTPUT", objects.get(2)[1]); // it prints out "World"