2016-04-05 13 views
7

Mam List<String>, potencjalnie posiadające tysiące ciągów. Wdrażam metodę sprawdzania poprawności, która obejmuje zapewnienie, że nie ma żadnych wiodących lub kończących białych znaków w każdym ciągu znaków.Jaki jest najlepszy sposób przycinania() wszystkich elementów na liście <String>?

Jestem obecnie iteracji po liście, nazywając String.trim() dla każdego String i dodanie go do nowego List<String> i realokacja z powrotem do oryginalnej listy po:

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

originalStrings = trimmedStrings; 

czuję się jak tam jest DRYer sposobem Zrób to. Czy istnieją alternatywne, bardziej wydajne podejścia? Dzięki!

Edycja: Tak Jestem na 8 Java, więc propozycje Java 8 są mile widziane!

+0

Połączone pytanie mówi o wyższym łańcuchu dla każdego Stringa, ale tutaj jest tak samo dla przycinania: 'originalStrings.replaceAll (String :: trim);' – Tunaki

+0

Niestety, nie. Ciągi są niezmienne, co oznacza, że ​​musisz pracować z nowymi obiektami String niż ten, który już znajduje się na Liście. Dzięki konkretnym implementacjom List można usunąć element i wstawić przycięty obiekt w tej samej pozycji, który zapisałby ci drugi "List". – f1sh

Odpowiedz

18

W Javie 8, należy użyć coś takiego:

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

również możliwe jest użycie jednoargumentowy String::trim operatora dla elementów pierwotnej liście (nieodcięta String przypadki zostaną nadpisane) poprzez wywołanie tej metody:

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

Dzięki Cootri. Czym różni się twoje rozwiązanie od 'originalStrings.replaceAll (String :: trim) Tunaki? – heez

+2

on modyfikuje elementy listy wejściowej. Nie ma więc potrzeby deklarowania nowej listy "trimmedStrings" i marnowania więcej miejsca. Ale początkowe niepoprawione wartości "String" zostaną utracone. – Cootri

+1

Powinieneś zasugerować rozwiązanie Java 7, tutaj jest jeden, który zestawiłem: http://pastebin.com/sF3ixCq4 –

4

Jeśli jesteś na java-8, można użyć:

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