web-dev-qa-db-fra.com

Comment puis-je remplacer la méthode toString d'un ArrayList en Java?

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?

10
user2426316

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.

5
arshajii
ArrayList<String> list = new ArrayList<String>()
{
    private static final long serialVersionUID = 1L;

    @Override public String toString()
    {
        return super.toString();
    }
};
10
sashok724

Vous ne pouvez pas remplacer la méthode toString de ArrayList1. 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:

9
Luiggi Mendoza

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;
    }
}
6
Dennis Kriechel

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.

0
Xiaogang

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]

0
Tom Ritch