2017-09-23 4 views
0

Je lis une matrice à partir d'un fichier et toutes les colonnes ont un type de données différent. Je ne trouve pas de structure pour contenir et manipuler mes données. Merci pour l'aide.Type de données et liaison dynamique dans Java

// I read a matrix from file and all column have a different type. 
    int[] iT = new int[] {1,3,5}; 
    long[] lT = new long[] {123, 456, 789}; 
    double[] dT = new double[] {1.2d, 3.2d, 5.2d}; 

    // I like to know if there are a kind of structure to hold and manipulate it. 
    Collection<Object[]> collection = new HashSet<Object[]>(); 

    collection.add(iT); 
    collection.add(dT); 
    collection.add(lT);  

    for(Object[] obj : collection) { 

     String type = obj.getClass().getSimpleName(); 

     switch (type) { 

     case "double[]": 
      for(Object element : obj) System.out.println(element); 
      break; 

     case "int[]": 
      for(Object element : obj) System.out.println(element); 
      break; 

     case "long[]": 
      for(Object element : obj) System.out.println(element); 
      break; 
     } 
    } 
+0

Bien sûr mon code ne fonctionne pas ;-) –

Répondre

0

De ma compréhension de votre tâche, vous voulez toutes les valeurs individuelles dans une seule collection, et non pas les tableaux (corrigez-moi si je me trompe). Vous pouvez essentiellement les mettre dans (presque) toute collection que vous aimez (je l'ai utilisé ArrayList), le problème que vous avez est que les tableaux primitifs doivent être boxed avant de pouvoir les ajouter à votre collection:

public static void main(String[] args) { 
    int[] iT = new int[] { 1, 3, 5 }; 
    long[] lT = new long[] { 123, 456, 789 }; 
    double[] dT = new double[] { 1.2d, 3.2d, 5.2d }; 

    Integer[] boxedInts = IntStream.of(iT).boxed().toArray(Integer[]::new); 
    Long[] boxedLongs = LongStream.of(lT).boxed().toArray(Long[]::new); 
    Double[] boxedDoubles = DoubleStream.of(dT).boxed().toArray(Double[]::new); 

    Collection<Object> collection = new ArrayList<>(); 

    collection.addAll(Arrays.asList(boxedInts)); 
    collection.addAll(Arrays.asList(boxedLongs)); 
    collection.addAll(Arrays.asList(boxedDoubles)); 

    for (Object element : collection) { 
     System.out.print(element.toString() + " "); 
    } 
    //prints 1 3 5 123 456 789 1.2 3.2 5.2 
} 
+0

Merci, je peux résoudre mon problème avec ça. –

+0

Excellent. Pouvez-vous alors accepter la réponse pour clôturer la question? – JensS