Lists.transform() devuelve una vista transformada de la lista original. Desde el Lists.transform() javadoc:
La lista devuelta siempre implementa Serializable, pero serialización tendrá éxito sólo cuando fromlist y función son serializable.
Al serializar la vista transformada, en realidad está serializando la lista original, más la función. En su caso, falla porque su lista original no es serializable (porque contiene elementos gráficos no serializables). Pero también podría fallar porque la función no implementa serializable.
Por cierto, hay un pequeño truco para crear funciones serializables sin la verborrea. En vez de hacer:
private static final class MyFunction extends Function<String, String> implements Serializable {
private static final MyFunction INSTANCE = new MyFunction();
@Override
public String apply(String input) {
return "[" + input + "]";
}
private Object readResolve() {
return INSTANCE;
}
private static final long serialVersionUID = 1;
}
Puede utilizar el patrón Singleton enumeración, lo cual es mucho menos detallado, y le consigue la serialización de libre (ya que las enumeraciones son serializable). También se asegura de que su función sea singleton:
// enum singleton pattern
private enum MyFunction implements Function<String, String> {
INSTANCE;
@Override
public String apply(String input) {
return "[" + input + "]";
}
}
No tiene para crear una nueva lista, vea @eneveu answer. – Xaerxess
El OP indicó que fromList estaba específicamente lleno de elementos no serializables. –
@Xaerness ¿puedes modificar tu comentario? No se puede obtener una lista serializable simplemente usando el enum trick (respuesta @eneveu). Esta respuesta es la más útil con respecto a la pregunta. –