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?
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.
ArrayList<String> list = new ArrayList<String>()
{
private static final long serialVersionUID = 1L;
@Override public String toString()
{
return super.toString();
}
};
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:
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;
}
}
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.
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]