2015-07-15 12 views
9

posso usare qualcosa come:voci di elenco di stampa con Java 8 api

.forEach(System.out::print) 

per stampare le mie voci di elenco, ma se ho un'altra operazione da fare prima di stampare non posso utilizzarlo come:

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

che sto ricevendo un errore : vuoto non può essere dereferenziato

+0

E la domanda è? (btw, puoi usare un flusso e una mappa) –

+0

La domanda è cosa sto sbagliando. – vicolored

risposta

18

dovete decidere. Quando si desidera modificare l'elenco, non è possibile combinare le operazioni. Hai bisogno di due dichiarazioni allora.

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

Se si desidera solo map valori prima di stampare senza modificare la lista, dovrete utilizzare un Stream:

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

Se si desidera stampare e salvare i valori modificati contemporaneamente si può fare

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

Il modo migliore per stampare tutti in uno go is

Arrays.toString (list.toArray())

+3

'Arrays.toString (list.toArray())' produce lo stesso risultato di 'list.toString()', ma quest'ultimo non richiede di copiare l'intero contenuto in una matrice temporanea. – Holger

+0

chi ha votato questo? è così inutile. – None