wake-up-neo.com

Wie kann ich die toString-Methode einer ArrayList in Java überschreiben?

Ich hätte gerne eine eigene Implementierung der toString () -Methode für eine ArrayList in Java. Ich kann es jedoch nicht zum Laufen bringen, obwohl ich mein toString () so zu der Klasse hinzugefügt habe, die die ArrayList enthält.

@Override
public String toString() {
    String result = "+";
    for (int i = 0; i < list.size(); i++) {
        result += " " + list.get(i);
    }
    return result;
}

Wenn ich meine ArrayList so list.toString() aufrufe, erhalte ich immer noch die Standarddarstellung. Vermisse ich etwas?

10
user2426316

Du solltest etwas tun

public static String listToString(List<?> list) {
    String result = "+";
    for (int i = 0; i < list.size(); i++) {
        result += " " + list.get(i);
    }
    return result;
}

und übergeben Sie die Liste als Argument von listToString(). Sie können can ArrayList technisch erweitern (entweder mit einer anonymen Klasse oder einer konkreten Klasse) und toString selbst implementieren, aber das erscheint hier unnötig.

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

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

Sie können die toString-Methode von ArrayList nicht überschreiben1. Stattdessen können Sie eine Dienstprogrammklasse verwenden, die eine ArrayList in eine String konvertiert, so wie Sie es wünschen/benötigen. Eine andere Alternative wäre Arrays.deepToString(yourList.toArray()).

Mit Java 8 ist dies sehr einfach möglich:

//List<String> list
System.out.println(String.join(",", list));

Oder wenn Sie einen List<Whatever> haben:

System.out.println(
    list.stream()
        .map(Whatever::getFieldX())
        .collect(Collectors.joining(", "))
);

Ich bin immer noch dagegen, ArrayList oder ähnliches zu erweitern, ist technisch möglich, sehe aber keine gute Option.


1 Sie könnten ArrayList erweitern und die toString überschreiben, aber im Allgemeinen ist dies keine gute Idee. Weitere Informationen:

9
Luiggi Mendoza

Sie müssen eine Klasse schreiben, die sich von ArrayList aus erstreckt:

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

Sie können die toString-Methode in einer neu erstellten Klasse überschreiben. Sie sollten jedoch sicherstellen, dass die erstellte Klasse ArrayList erweitert. Dann können Sie die toString-Methode überschreiben. Dies basiert auf der Beziehung IS. Die neu erstellte Klasse ist ein Typ von ArrayList.

Sie können auch eine ArrayList erstellen, die auf der HAS-Beziehung basiert. In diesem Fall müssen Sie eine andere Methode schreiben, um String zurückzugeben, anstatt die toString-Methode zu überschreiben.

0
Xiaogang

So überschreiben Sie toString () für das ArrayList Integer-Array:

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 );

erzeugt: list = [5, 4, 2, 9, 1, 7]

0
Tom Ritch