2017-01-11 1 views
0

J'essaye de faire un tableau avec 2 valeurs par item, comme une valeur avec un en-tête personnalisé, et, venant de Ruby, je ne trouve pas une façon correcte de le faire en Java.Tableau avec 2 valeurs par article

Ceci est pour des tests REST-assurés que j'ai besoin d'automatiser.

Ceci est la méthode que je dois faire, je mélange la déclaration de obj avec une sorte de rubis moyen de le faire, de sorte que la nécessité, il est plus clair:

private String[] getHeaders() { 
    String[] obj = [ 
      'Signature' => this.getSignature(), 
      'Timestamp' => this.getTimestamp(), 
      ]; 

     if(getSessionToken() != null) { 
      obj.sessionToken = this.getSessionToken(); 
     } 
    } 
} 
+8

Créez un type personnalisé avec les deux valeurs qui vous intéressent. Faites un tableau de ce type. – azurefrog

+2

Vous pouvez créer une classe de modèle distincte qui représente la chose dont vous avez besoin et à l'intérieur de celle-ci ont 2 champs, signature et horodatage. Puis déclarez le tableau de cette classe, par ex. 'Objets MyClass [] = new MyClass [10];'. – Vucko

+0

Exactement ce que @azurefrog a dit un peu avant moi: D – Vucko

Répondre

3

Vous pouvez y parvenir en créant un modèle. Par exemple:

public class MyModel { 
    private String signature; 
    private String timestamp; 

    public MyModel() { 
     // constructor 
    } 

    public MyModel(String signature, String timestamp){ 
     this.signature = signature; 
     this.timestamp = timestamp; 
    } 

    public String getSignature() { 
     return signature; 
    } 

    public void setSignature(String signature) { 
     this.signature = signature; 
    } 

    public String getTimestamp() { 
     return timestamp; 
    } 

    public void setTimestamp(String timestamp) { 
     this.timestamp = timestamp; 
    } 
} 

Ensuite, créez un tableau de votre modèle. Vous pouvez utiliser:

private static final int MODEL_SIZE = 5; 
private MyModel[] models = new MyModel[MODEL_SIZE]; 

si vous connaissez déjà la taille de votre baie. Vous pouvez aussi utiliser cette approche ci-dessous si vous ne connaissez pas la taille du tableau encore:

private ArrayList<MyModel> models = new ArrayList<>; 
private MyModel model; 

// Then fill your models 

// by using this way 
model = new MyModel("My Signature", "My Timestamp"); 
models.add(model); 

// or this way 
model = new MyModel(); 
model.setSignature("My Signature"); 
model.setTimestamp("My Timestamp"); 
models.add(model); 

Une autre façon d'y parvenir sans créer un modèle en utilisant HashMap. Voici l'exemple:

List<HashMap<String, String>> objects = new ArrayList<>(); 

HashMap<String, String> object = new HashMap<>(); 
object.put("signature", "My Signature"); 
object.put("timestamp", "My Timestamp"); 

objects.add(object); 
+0

J'aime la façon HashMap de le faire, mais Im obtenir des erreurs, des marqueurs multiples à cette ligne \t - Erreur de syntaxe, insérer « VariableDeclarators » pour terminer \t LocalVariableDeclaration \t - Erreur de syntaxe, insérer « ; » pour compléter BlockStatements \t - Impossible de déduire les arguments de type pour HashMap <> –

+0

Je les ai résolus, c'était une erreur de définition de ma part, merci! –

1

Quelque chose comme ça, je pense est ce que tu veux.

class Headers{ 
     public String signature; 
     public String timeStamp; 
    } 
    Headers[] header = new Headers[10]; 

Vous n'avez probablement pas besoin de getters et de setters, mais vous pouvez aussi les lancer.