Lists.transform()은 원래 목록의 변형 된보기를 반환합니다. Lists.transform() javadoc에서 : fromList과 기능이 직렬화 때 반환 된 목록은 항상 직렬화 구현하지만
직렬화 에만 성공합니다.
변환 된보기를 serialize 할 때 실제로는 원래 목록과 함수를 직렬화합니다. 귀하의 경우 원래 목록이 직렬화 가능하지 않기 때문에 실패합니다 (직렬화 할 수없는 그래프 요소가 포함되어 있기 때문에). 그러나 함수가 직렬화를 구현하지 않기 때문에 실패 할 수도 있습니다.
자세히 알아보기, 간결함없이 직렬화 가능 기능을 만드는 것은 약간의 트릭입니다. 대신 일을 :
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;
}
당신은 훨씬 덜 장황하고 (열거 직렬화 때문에) 무료 당신에게 직렬화를 얻을 열거 싱글 톤 패턴을 사용할 수 있습니다. 또한 함수가 싱글 톤인지 확인합니다.
// enum singleton pattern
private enum MyFunction implements Function<String, String> {
INSTANCE;
@Override
public String apply(String input) {
return "[" + input + "]";
}
}
새로운 목록을 만들려면 @eneveu 대답을 참조하십시오. – Xaerxess
OP는 fromList가 특히 직렬화 할 수없는 요소들로 가득하다고 말했습니다. –
@Xaerness 댓글을 수정할 수 있습니까? enum 트릭 (@eneveu 응답)을 사용하여 직렬화 가능 목록을 가져올 수 없습니다. 이 대답은 질문과 관련하여 가장 유용합니다. –