Je voudrais avoir ma propre implémentation de la méthode toString () pour un ArrayList en Java. Cependant, je ne peux pas le faire fonctionner même si j'ai ajouté mon toString () comme ceci à la classe qui contient ArrayList.
@Override
public String toString() {
String result = "+";
for (int i = 0; i < list.size(); i++) {
result += " " + list.get(i);
}
return result;
}
Lorsque j'appelle mon ArrayList comme ceci list.toString()
, j'obtiens toujours la représentation par défaut. Est-ce que je manque quelque chose?
Tu devrais faire quelque chose comme
public static String listToString(List<?> list) {
String result = "+";
for (int i = 0; i < list.size(); i++) {
result += " " + list.get(i);
}
return result;
}
et transmettez la liste en tant qu'argument de listToString()
. Vous pouvez étendre techniquement ArrayList
(avec une classe anonyme ou concrète) et implémenter vous-même toString
, mais cela semble inutile ici.
ArrayList<String> list = new ArrayList<String>()
{
private static final long serialVersionUID = 1L;
@Override public String toString()
{
return super.toString();
}
};
Vous ne pouvez pas remplacer la méthode toString
de ArrayList
1. Au lieu de cela, vous pouvez utiliser une classe d’utilitaire qui convertit une ArrayList
en une String
comme vous le souhaitez. Une autre alternative serait d'utiliser Arrays.deepToString(yourList.toArray())
.
En utilisant Java 8, cela peut être fait très facilement:
//List<String> list
System.out.println(String.join(",", list));
Ou si vous avez un List<Whatever>
:
System.out.println(
list.stream()
.map(Whatever::getFieldX())
.collect(Collectors.joining(", "))
);
Je suis toujours contre l'extension ArrayList
ou similaire, c'est techniquement possible mais je ne le vois pas comme une bonne option.
1 vous pouvez prolonger ArrayList
et remplacer la toString
mais en général, ce n'est pas une bonne idée. Plus d'infos:
Vous devez écrire une classe s'étendant de ArrayList:
import Java.util.ArrayList;
public class MyArrayList extends ArrayList {
private static final long serialVersionUID = 1L;
@Override
public String toString() {
String result = "+";
for (int i = 0; i < this.size(); i++) {
result += " " + this.get(i);
}
return result;
}
}
Vous pouvez remplacer la méthode toString dans une nouvelle classe créée, mais vous devez vous assurer que celle-ci étend ArrayList. Ensuite, vous pouvez remplacer la méthode toString. Ceci est basé sur IS relation. La nouvelle classe créée est un type de ArrayList.
Vous pouvez également créer une ArrayList, basée sur la relation HAS. Dans ce cas, vous devez écrire une autre méthode pour renvoyer String au lieu de remplacer la méthode toString.
Pour remplacer toString () pour le tableau ArrayList Integer:
class MyArrayList extends ArrayList<Integer> {
private static final long serialVersionUID = 1L;
@Override public String toString( ) {
String output = "";
for ( int i = 0 ; i < this.size(); i++ )
output = Integer.toString( this.get( i ) );
return output;
}
}
ArrayList<Integer> list =
new ArrayList<>(Arrays.asList( 5, 4, 2, 9, 1, 7 ) );
System.out.print( "list = " + list );
va générer: liste = [5, 4, 2, 9, 1, 7]