Questo funziona solo su un List
, non su un Collection
, in quanto quest'ultimo non ha nozione di sostituzione o l'impostazione di un elemento.
Ma dato un List
, è abbastanza facile da fare quello che vuoi con il metodo List.replaceAll()
:
List<String> list = Arrays.asList("a", "b", null, "c", "d", null);
list.replaceAll(s -> s == null ? "x" : s);
System.out.println(list);
uscita:
[a, b, x, c, d, x]
Se si desidera una variazione che prende un predicato, si potrebbe scrivere una piccola funzione di aiuto per farlo:
static <T> void replaceIf(List<T> list, Predicate<? super T> pred, UnaryOperator<T> op) {
list.replaceAll(t -> pred.test(t) ? op.apply(t) : t);
}
Questo sarebbe invocato come segue:
replaceIf(list, Objects::isNull, s -> "x");
dando lo stesso risultato.
fonte
2016-03-06 01:15:19
Grazie a Stuart per correggere la domanda oltre a dare una risposta pulita ed elegante a questo. –