2015-07-15 19 views
9

ich so etwas wie verwenden:Liste drucken Artikel mit Java 8 api

.forEach(System.out::print) 

meiner Liste Artikel zu drucken, aber wenn ich eine andere Operation zu tun haben, vor dem Drucken kann ich es nicht verwenden mag:

mylist.replaceAll(s -> s.toUpperCase()).forEach(System.out::print) 

ich erhalte eine Fehler: void kann nicht

+0

Und die Frage ist? (übrigens, Sie können einen Stream und Karte verwenden) –

+0

Die Frage ist, was mache ich falsch. – vicolored

Antwort

18

Sie entscheiden, haben dereferenziert werden. Wenn Sie die Liste ändern möchten, können Sie die Vorgänge nicht kombinieren. Sie benötigen dann zwei Anweisungen.

myList.replaceAll(String::toUpperCase);// modifies the list 
myList.forEach(System.out::println); 

Wenn Sie nur map Werte wollen vor dem Druck, ohne die Liste zu ändern, werden Sie ein Stream verwenden müssen:

myList.stream().map(String::toUpperCase).forEachOrdered(System.out::println); 
0

Wenn Sie gleichzeitig drucken möchten und geänderten Werte speichern Sie können

List<String> newValues = myList.stream().map(String::toUpperCase) 
.peek(System.out::println).collect(Collectors.toList()); 
0

Die beste Möglichkeit, alle von ihnen in einem zu drucken gehen ist

Arrays.toString (list.toArray())

+3

'Arrays.toString (list.toArray())' erzeugt das gleiche Ergebnis wie 'list.toString()', aber letzteres erfordert nicht das Kopieren des gesamten Inhalts in ein temporäres Array. – Holger

+0

Wer hat das gewählt? es ist so nutzlos. – None