Ich habe eine toString()
Repräsentation von ArrayList
.
Kopieren Sie den Wert toString()
in die Zwischenablage, ich möchte ihn in meinen IDE-Editor kopieren und die Instanz ArrayList
in einer Zeile erstellen. Tatsächlich mache ich das wirklich:
Meine Eingabe sieht so aus:
%Vor%
Folgendes funktioniert nicht:
Arrays.asList()
Lists.newArrayList()
Vorschläge?
Teilstring entfernt, Teilen es auf ,
(Komma und Leerzeichen) und schließlich füttern es Arrays#asList()
.
Beachten Sie, dass dies in Ihrem speziellen Fall funktioniert, aber nicht unter allen Umständen. Sie können zum Beispiel eine Liste von Strings haben, von denen mindestens eins ein nachfolgendes Komma und Leerzeichen enthält. Die Aufteilung würde dann fehlschlagen.
Im Allgemeinen enthält der toString()
aller Objekte keine Informationen, um das ursprüngliche Objekt ohne weitere Informationen zu reproduzieren.
In Ihrem speziellen Fall könnte das Beispiel von vielen verschiedenen ArrayList
-Instanzen (sowie ziemlich allen anderen List
Implementierungen, die identische toString()
haben) Implementierungen erzeugt werden.
Als extremes Beispiel denken Sie an eine ArrayList
, die ein einzelnes Element enthält, nämlich String
mit dem Inhalt 15.82, 15.870000000000001, 15.92, 16.32, 16.32, 16.32, 16.32, 17.05, 17.05, 17.05, 17.05, 18.29, 18.29, 19.16
. Das ArrayList
würde genau die gleiche Ausgabe wie Ihre ursprüngliche ArrayList
ergeben. Und da zwei verschiedene Eingänge die gleiche Ausgabe erzeugen, kann diese Funktion ohne zusätzliche Informationen nicht umgekehrt werden.
Wenn wir jedoch zusätzliche Informationen haben, z. B. den Inhaltstyp der ursprünglichen ArrayList
, wird dies in einigen Fällen möglich. Wenn wir wissen, dass alle Elemente von List
vom Typ Double
sind, dann ist es eigentlich ziemlich einfach:
Zugegeben, es ist kein One-Liner, aber es ist nicht so schlimm.
Das funktioniert, aber vielleicht hat jemand etwas eleganteres?
%Vor%Ich möchte das kopieren ArrayList.toString () in meinen Editor zu Erstellen Sie einen Test gegen diesen Randfall
Wenn Sie überhaupt kopieren, können Sie nicht einfach Werte kopieren, ohne die eckigen Klammern zu verwenden, und ein
aufrufen %Vor%Wenn Sie nur nach einer Kopierpastenlösung suchen,
%Vor%d. Löschen Sie die Anführungszeichen und eckigen Klammern, bevor Sie versuchen, sie in asList () zu setzen. Das sollte Ihnen eine Liste geben, die Sie leicht verwenden können, um eine neue ArrayList zu erstellen.
Wenn die Daten komplizierter als doppelt sind, müssen Sie möglicherweise eine Möglichkeit finden, sie zu parsen.
Die Anforderung "Muss eine Zeile sein" stellt sicher, dass Sie ein paar unschöne Ketten von API-Aufrufen erhalten, es sei denn, Sie schreiben eine Hilfsmethode zum Einkapseln von Dingen.
Es ist irgendwie hässlich, aber ähnlich wie dotnetnewbie's Ansatz:
%Vor%Es ist aus dem Ärmel, so dass ich sicher bin, dass es ein bisschen sauber gemacht werden kann.
Ein eleganterer und einfacher zu lesender Ansatz wäre definitiv, ihn entweder über ein paar Zeilen auszubrechen oder zu einer Hilfsmethode in Ihrem Testfall (oder einer Util-Klasse) umzuformen, die Sie mit Ihrem String aufrufen können gib die gewünschte Ausgabe zurück.
Tags und Links java collections arraylist tostring