पीटर Lawrey टिप्पणी की में चेतावनियां, इस लगभग निश्चित रूप से नेस्ट छोरों के रूप में सरल होने जा रहा है।
पहल कोड अपने डिफ़ॉल्ट, जावा 7. के रूप में अपनी पहली पसंद होना चाहिए आप कार्यात्मक मुहावरे प्रयोग नहीं करना चाहिए जब तक कि आप निम्न में से एक का पूरी तरह से सुनिश्चित कर रहे हैं::
अधिक से अधिक,
Guava documentation यह चेतावनी देता है
- कार्यात्मक मुहावरों का उपयोग आपकी संपूर्ण परियोजना के लिए कोड की लाइनों की शुद्ध बचत के परिणामस्वरूप होगा। फ़ंक्शन के किसी अन्य फ़ाइल, या निरंतर परिभाषा को स्थानांतरित करने में मदद नहीं करता है।
- दक्षता के लिए, आपको संग्रह के आलसी गणना के दृश्य की आवश्यकता है और स्पष्ट रूप से गणना किए गए संग्रह के लिए व्यवस्थित नहीं हो सकता है। इसके अतिरिक्त, आपने उन निर्देशों का पालन करने के अलावा प्रभावी जावा, आइटम 55, और पढ़ और पढ़ा है, आपने वास्तव में बेंचमार्किंग किया है यह साबित करने के लिए कि यह संस्करण तेज़ है, और इसे साबित करने के लिए संख्या उद्धृत कर सकते हैं।
कृपया सुनिश्चित करें कि, जब अमरूद के कार्यात्मक उपयोगिताओं का उपयोग कर, काम करने के पारंपरिक जरूरी रास्ता अधिक पढ़ने योग्य नहीं है कि हो सकता है। इसे लिखने का प्रयास करें। क्या वह इतना बुरा था? क्या पूर्वोत्तर अजीब कार्यात्मक दृष्टिकोण से पठनीय था, आप कोशिश करने के बारे में थे?
हालांकि, अगर आप सलाह की अनदेखी पर आग्रहपूर्ण कर रहे हैं, आप कुछ इस कुरूपता की तरह इस्तेमाल कर सकते हैं (ध्यान दें मैं वास्तव में संकलन या इस चलाने के लिए प्रयास नहीं किया है):
FluentIterable.from(continentList)
.transform(new Function<Continent, Void>() {
public Void apply(Continent continent) {
return FluentIterable.from(continent.getCountries())
.transform(new Function<Country, Void>() {
public Void apply(Country country) {
return FluentIterable.from(country.getCities())
.transform(new Function<City, Void>() {
public Void apply(City city) {
// do stuff with city object
return null;
}
});
}
});
}
});
अब अपने आप से पूछना: आप कौन सा बनाए रखना चाहते हैं? कौन सबसे कुशल होने जा रहा है?
अमरूद के कार्यात्मक मुहावरे के लिए वैध उपयोग-मामले हैं। लूप के लिए जावा को प्रतिस्थापित करना, लूप के लिए भी घोंसला, उनमें से एक नहीं है।
आप अपने मैपिंग घोंसला कर सकते हैं। आईएमएचओ कम से कम बाहरी लूप के लिए नेस्टेड लूप के रूप में सरल होने की संभावना है। –
लाइन 3 में, यह "continent.getCountries()" नहीं होना चाहिए? – Chris
आप <महाद्वीप, देश, शहर> ट्रिपल की एक सूची बनाने के लिए गुवाओं "ट्रांसफॉर्म" और "कॉन्सैट" का उपयोग कर सकते हैं और फिर उस पर फिर से चालू हो सकते हैं, लेकिन जावा 7 के साथ कम से कम, कोड बदसूरत होगा। मैं नेस्टेड लूप के साथ रहूँगा। – Chris