2016-04-05 8 views
7

Ich habe eine List<String>, potenziell Tausende von Strings halten. Ich implementiere eine Validierungsmethode, bei der sichergestellt wird, dass in jeder Zeichenfolge keine führenden oder nachgestellten Leerzeichen enthalten sind.Wie schneidet man() alle Elemente in einer Liste <String> am besten ab?

ich zur Zeit über die Liste iterieren, für jeden StringString.trim() Aufruf und Hinzufügen zu einem neuen List<String> und zurück auf die ursprüngliche Liste Neuzuweisung nach:

List<String> trimmedStrings = new ArrayList<String)(); 
for(String s : originalStrings) { 
    trimmedStrings.add(s.trim()); 
} 

originalStrings = trimmedStrings; 

Ich fühle mich wie ein es DRYer Weg mach das. Gibt es hier alternative, effizientere Ansätze? Vielen Dank!

Edit: Ja, ich bin auf Java 8, so Java 8 Vorschläge sind willkommen!

+0

Die verknüpfte Frage bezieht sich auf das Überhöhen jedes Strings, aber das gleiche gilt für das Trimmen: 'originalStrings.replaceAll (String :: trim);' – Tunaki

+0

Leider nein. Zeichenfolgen sind unveränderbar, dh Sie müssen mit neuen Zeichenfolgenobjekten arbeiten, die nicht bereits in der Liste enthalten sind. Bei bestimmten List-Implementierungen könnten Sie ein Element entfernen und das getrimmte Objekt an der gleichen Position einfügen, wodurch Sie die zweite "Liste" sparen würden. – f1sh

Antwort

18

In Java 8, sollten Sie so etwas wie verwenden:

List<String> trimmedStrings = 
    originalStrings.stream().map(String::trim).collect(Collectors.toList()); 

auch ist es möglich, einstellige String::trim Operator für Elemente der ersten Liste (untrimmed String Instanzen überschrieben werden) zu verwenden, indem Sie diese Methode aufrufen:

originalStrings.replaceAll(String::trim); 
+0

Danke Cootri. Wie unterscheidet sich Ihre Lösung von Tunakis "originalStrings.replaceAll (String :: trim)"? – heez

+2

ändert er Elemente der Eingabeliste. Es ist also nicht notwendig, eine neue "trimmedStrings" -Liste zu deklarieren und mehr Platz zu verschwenden. Aber die anfänglich nicht getrimmten 'String'-Werte gehen verloren. – Cootri

+1

Sie sollten eine Java 7-Lösung vorschlagen, hier ist eine, die ich zusammensetze: http://pastebin.com/sF3ixCq4 –

4

Wenn Sie auf Java-8 sind, können Sie verwenden:

final List<Object> result = arrayList.stream() 
     .map(String::trim) 
     .collect(Collectors.toList()); 
Verwandte Themen