2014-03-31 1 views
16

Ich möchte alle Elemente in list ändern.
Was ist der richtige Weg, es mit java8 zu tun?wie man Elemente in einer Liste von Zeichenketten in java8 ändert

public class TestIt { 

public static void main(String[] args) { 
    ArrayList<String> l = new ArrayList<>(); 
    l.add("AB"); 
    l.add("A"); 
    l.add("AA"); 
    l.forEach(x -> x = "b" + x); 
    System.out.println(l); 
} 

} 
+1

Denken Sie daran, dass alles, was in Java 7 gültig ist, auch in Java 8 gültig ist. Es gibt also mehrere korrekte Möglichkeiten. – immibis

Antwort

34

Sie können replaceAll verwenden.

Ersetzt jedes Element dieser Liste durch das Ergebnis der Anwendung des Operators auf dieses Element.

ArrayList<String> l = new ArrayList<>(Arrays.asList("AB","A","AA")); 
l.replaceAll(x -> "b" + x); 
System.out.println(l); 

Ausgang:

[bAB, bA, bAA] 
14

Wenn Sie Ströme verwenden möchten, können Sie so etwas tun:

List<String> l = new ArrayList<>(Arrays.asList("AB","A","AA")); 
l = l.stream().map(x -> "b" + x).collect(Collectors.toList()); 
System.out.println(l); 

Ausgang:

[bAB, bA, bAA] 

Natürlich Es ist besser r replaceAll zu verwenden, wenn Sie alle Elemente einer Liste ändern möchten, aber Streams verwenden, können Sie auch Filter anwenden oder einfach parallelisieren. replaceAll ändert auch die Liste und löst eine Ausnahme aus, wenn die Liste nicht änderbar ist, während collect eine neue Liste erstellt.

+0

Könnten Sie auch erklären, warum es besser ist, Streams zu verwenden? Oder erklären, was der Unterschied ist? – bobbel

+0

Ich habe einen Kommentar hinzugefügt. Die Idee war, einen anderen Weg aufzuzeigen, wie es mit neuen Java-8-Funktionen implementiert werden kann. Wie immibis die Frage kommentiert hat, gibt es mehrere richtige Wege, um zu erreichen, was gefragt wurde. – Roland

+0

Großartig! Danke für die weitere Erklärung! Das wollte ich erreichen :) – bobbel

Verwandte Themen