1
votes

Ne convertissez pas les valeurs «nulles» des tableaux

J'ai 3 tableaux génériques qui ont tous une taille prédéterminée de 25. Par exemple, si ses 5 seules valeurs réelles dans le tableau, il affichera ces 5, les 20 suivantes comme nulles. Je ne veux pas afficher de valeurs nulles. Dois-je modifier quelque chose dans le toString? Mon toString est

public String toString(){
  return Arrays.toString(container);
}

Container étant un objet tableau créé à partir d'une fonction constructeur. Voici à quoi ressemble ma sortie.

Image de la sortie a >


5 commentaires

Veuillez importer le résultat dans votre message, n'utilisez pas de lien externe.


Je ne comprends pas comment prendre et télécharger une photo de votre écran semble être plus facile que de copier / coller cette ligne de texte dans la question.


stackoverflow.com/questions/26353491 /… ?


On ne sait pas ce qu'est un «tableau générique». Voulez-vous dire un tableau dont le type d'élément est donné par une variable de type? Ou peut-être simplement un Object [] explicite?


Cela me semble être un mauvais modèle de données. Utilisez ArrayList au lieu de array ou gardez un pointeur en haut sur le premier emplacement vide pour que vous sachiez quelle partie du tableau imprimer. Ensuite, il existe un certain nombre d'options pour l'impression.


4 Réponses :


1
votes

En supposant que vous utilisez java8 ou version ultérieure:

Arrays.toString(Arrays.stream(container).filter(i->i!=null).collect(Collectors.toList()));


0 commentaires

2
votes

Dans ce qui suit, je suppose que votre conteneur est quelque chose comme Something [] container .

Pré-java 8 utilisant StringBuilder:

public String toString(){
    return Arrays.stream(container)
                 .filter(Objects::nonNull)
                 .map(Object::toString)
                 .collect(Collectors.joining(","));
}

Post-java 8 utilisant des flux:

public String toString(){
    StringBuilder s = new StringBuilder();
    for (Something i : container) if (i!=null) s.append(i.toString()+",");
    return s.toString();
}


1 commentaires

Merci, j'essaierai vos solutions lorsque j'arriverai plus tard à mon ordinateur portable.



1
votes

Une autre solution avec le flux java8:

MyType[] array = Arrays.stream(originalArray)
                       .filter(Objects::nonNull)
                       .toArray(MyType[]::new);
    
System.out.println(Arrays.toString(array));


0 commentaires

2
votes

Les méthodes Arrays.toString () produisent toutes une représentation du tableau entier . Si ce n'est pas ce que vous voulez, vous devez choisir une approche différente. Par exemple, vous pouvez faire quelque chose comme ceci:

String result = Arrays.stream(container)
        .filter(Objects::nonNull)
        .map(Objects::toString)
        .collect(Collectors.joining(",", "[", "]"));


1 commentaires

Je ne vois pas vraiment la partie hacky à ce sujet. Du moins pas comparé aux autres réponses.