Lists.transform() मूल सूची की एक तब्दील देखने देता है। Lists.transform() javadoc से:
लौटे सूची हमेशा Serializable लागू करता है, लेकिन क्रमबद्धता केवल सफल होने जब fromList और समारोह serializable हैं जाएगा।
जब परिवर्तित दृश्य को क्रमबद्ध करते हैं, तो आप वास्तव में मूल सूची, साथ ही फ़ंक्शन को क्रमबद्ध कर रहे हैं। आपके मामले में, यह विफल हो जाता है क्योंकि आपकी मूल सूची धारावाहिक नहीं है (क्योंकि इसमें गैर-क्रमिक ग्राफ तत्व शामिल हैं)। लेकिन यह भी असफल हो सकता है क्योंकि फ़ंक्शन serializable लागू नहीं करता है।
BTW, वहाँ शब्दाडंबर बिना serializable कार्यों बनाने के लिए एक छोटे से चाल है। इसके बजाय ऐसा करने का:
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 सिंगलटन पैटर्न है, जो बहुत कम अत्यधिक शब्द है, और के लिए मुक्त आप क्रमबद्धता हो जाता है (क्योंकि enums serializable कर रहे हैं) का उपयोग कर सकते हैं। यह भी सुनिश्चित करता है कि आपका फ़ंक्शन एक सिंगलटन है:
// enum singleton pattern
private enum MyFunction implements Function<String, String> {
INSTANCE;
@Override
public String apply(String input) {
return "[" + input + "]";
}
}
स्रोत
2012-02-24 00:14:39
आप की जरूरत नहीं है नई सूची बनाने के लिए, @eneveu उत्तर देखें। – Xaerxess
ओपी ने कहा कि सूची से विशेष रूप से गैर-धारावाहिक तत्वों से भरा था। –
@Xenerness क्या आप अपनी टिप्पणी संशोधित कर सकते हैं? आप enum trick (@eneveu answer) का उपयोग करके केवल एक धारावाहिक सूची नहीं प्राप्त कर सकते हैं। यह उत्तर प्रश्न के बारे में सबसे उपयोगी है। –