2011-01-29 15 views
22

चलो में मुहावरे एक सूची के पहले तत्व प्राप्त कोड बात पहलेग्रूवी

def bars = foo.listBars() 
def firstBar = bars ? bars.first() : null 
def firstBarBetter = foo.listBars()?.getAt(0) 

वहाँ एक सूची के पहले तत्व प्राप्त करने के लिए एक और अधिक सुरुचिपूर्ण या मुहावरेदार रास्ता नहीं है, या नल अगर यह संभव नहीं है? (मैं यहाँ एक कोशिश पकड़ ब्लॉक सुरुचिपूर्ण विचार किया जाएगा नहीं।)

+0

#listBars क्या वापस करता है? यदि आप किसी ऐसे तत्व को प्राप्त करने का प्रयास करते हैं जो किसी सूची से मौजूद नहीं है तो ग्रोवी को फेंकना नहीं चाहिए। 'अंतिम एल = []' ' एल जोर [0] == null' ' जोर l.getAt (0) == null' 'एल ArrayList' –

उत्तर

45

सुनिश्चित नहीं हैं कि खोज का उपयोग कर सबसे खूबसूरत या मुहावरेदार है, लेकिन यह संक्षिप्त है और अभ्यस्त एक IndexOutOfBoundsException फेंक देते हैं।

def foo 

foo = ['bar', 'baz'] 
assert "bar" == foo?.find { true } 

foo = [] 
assert null == foo?.find { true } 

foo = null 
assert null == foo?.find { true } 
+4

+1 instanceof जोर इस चाल के लिए। मैं कर सकता है तो यह और भी अधिक संक्षिप्त: 'foo .find {यह}' –

+3

एडम, [0] .find {यह} अशक्त – tixxit

+2

रिटर्न इस रूप में "पहले()" –

11

तुम भी

foo[0] 

यह कर एक NullPointerException फेंक होगा जब foo रिक्त है सकता है, लेकिन यह एक खाली सूची पर एक शून्य मान वापस आ जाएगी foo.first() जो खाली पर एक अपवाद फेंक देते हैं के विपरीत,।

+0

साझा करने के लिए धन्यवाद! मैं खोज के बाद पहले तत्व के लिए बेवकूफ समाधान के आसपास अटक गया था, एक सूची में जो पहले स्थान पर खाली हो सकता है, या खोज के बाद सभी और इससे मुझे जो चाहिए –

0

ग्रोवी 1.8.1 के बाद से हम ले() और ड्रॉप() विधियों का उपयोग कर सकते हैं। ले() विधि के साथ हमें सूची की शुरुआत से आइटम मिलते हैं। हम उन वस्तुओं की संख्या को पास करते हैं जिन्हें हम विधि के लिए तर्क के रूप में चाहते हैं।

सूची हम ड्रॉप() विधि उपयोग कर सकते हैं की शुरुआत से आइटम निकालने के लिए। विधि के लिए तर्क के रूप में ड्रॉप करने के लिए वस्तुओं की संख्या पास करें।

ध्यान दें कि मूल सूची नहीं बदला गया है, ले()/ड्रॉप() विधि का परिणाम एक नई सूची है।

def a = [1,2,3,4] 

println(a.drop(2)) 
println(a.take(2)) 
println(a.take(0)) 
println(a) 

******************* 
Output: 
[3, 4] 
[1, 2] 
[] 
[1, 2, 3, 4] 
संबंधित मुद्दे