2012-03-19 20 views
6

क्या ऐसा करने का कोई बेहतर तरीका है? नोट: part1, part2 और part3 स्ट्रिंग वेरिएबल्स कहीं और परिभाषित हैं (वे शून्य हो सकते हैं)।शून्य जांच के साथ ग्रोवी स्ट्रिंग concatenation

def list = [part1, part2, part3] 
list.removeAll([null]) 
def ans = list.join() 

वांछित परिणाम एक समेकित स्ट्रिंग है जो शून्य मानों के साथ छोड़ दिया गया है।

+0

आप एक पंक्ति में यह सब पैक कर सकते हैं: 'डीईएफ़ ans = [PART1, PART2, part3] .removeAll ([अमान्य]) में शामिल होने के()', लेकिन मुझे यकीन नहीं है कि "बेहतर" से आपका क्या मतलब है। – cdeszaq

+0

@cdeszaq यह बेहतर हो सकता है, लेकिन यह काम नहीं करता है। RemoveAll() विधि एक बूलियन लौटाती है, और जुड़ें() को बूलियन पर नहीं कहा जा सकता है। – Ryan

उत्तर

9

आप ऐसा कर सकते हैं:

def ans = [part1, part2, part3].findAll({it != null}).join() 

आप बंद सिर्फ {it} कैसे अपनी सूची आइटम Groovy Truth के अनुसार मूल्यांकन करेंगे पर निर्भर करता है के लिए नीचे हटना करने में सक्षम हो सकता है, लेकिन यह यह थोड़ा तंग करना चाहिए ।

नोट: GDK javadocsमहान संसाधन हैं।

4

यदि आप findAll का उपयोग पैरामीटर के साथ करते हैं। यह हर "सच्चा" मान प्रदान करेंगे, तो यह काम करना चाहिए:

def ans = [part1, part2, part3].findAll().join() 

सूचना है कि findAll रिक्त स्ट्रिंग को फ़िल्टर कर देगा (क्योंकि वे एक बूलियन संदर्भ में झूठी के रूप में मूल्यांकन किया जाता है), लेकिन यह है कि इस में कोई फर्क नहीं पड़ता मामला है, के रूप में रिक्त स्ट्रिंग join() के लिए कुछ भी नहीं जोड़ते :)

इस एक सरल सवाल है और आप खाली स्ट्रिंग मूल्यों को बनाए रखना चाहते हैं, तो आप findResults{ it } उपयोग कर सकते हैं।

+0

यह अनिवार्य रूप से मेरे उत्तर के समान ही है कि यह पुष्टि करने के अतिरिक्त कि 'findAll' कैसे काम करता है, है ना? – cdeszaq

+0

यह 'findAll' को पास किए गए बंद को भी हटा देता है और' findResults' का उल्लेख करता है, जो अन्य मामलों के लिए उपयोगी हो सकता है। – epidemian

+0

अच्छा बिंदु। 'findResults' में चीजों को बदलने के रूप में चीजों को बदलने की अच्छी क्षमता है। +1 – cdeszaq

2

वैकल्पिक रूप से, आप inject के साथ एक गुना आपरेशन के रूप में यह कर सकते हैं:

def ans = [part1, part2, part3].inject('') { result, element -> 
    result + (element ?: '') 
} 

इस पूरी सूची iterates और तर्क के साथ एक परिणाम के बाद एक तत्व, कोनकैटेनेट्स अशक्त तत्वों के लिए रिक्त स्ट्रिंग का उपयोग करें।

+1

+1 इंजेक्ट करने का सुझाव देने के लिए धन्यवाद मेरे उत्तर से कहीं अधिक शक्तिशाली तरीका है। यह _might_ हालांकि समझने के लिए थोड़ा और जटिल और कठिन हो। – cdeszaq

1

आप grep इस्तेमाल कर सकते हैं:।

groovy:000> list = ['a', 'b', null, 'c'] 
===> [a, b, null, c] 
groovy:000> list.grep {it != null}.join() 
===> abc 
+1

आप केवल '.grep()' का उपयोग कर सकते हैं क्योंकि यह फ़िल्टर के रूप में ग्रोवी सत्य का उपयोग करने के लिए डिफ़ॉल्ट है, लेकिन यह 'findAll()' का उपयोग करने जैसा ही है। – cdeszaq