2014-05-19 6 views
5

मैं एक विधि x बार कॉल करके एक सूची (या सामान्य रूप से संग्रह) बनाना चाहता हूं। पायथन में यह ऐसा कुछ होगा।जावा 8 में दी गई लंबाई की सूची कैसे उत्पन्न करें?

self.generated = [self.generate() for _ in range(length)] 

मैं JDK 8.

this.generated = IntStream.range(0, length) 
          .mapToObj(n -> this.generate()) 
          .collect(Collectors.toList()); 

यह काम करता है में कुछ इसी तरह कोड करने के लिए कोशिश की, लेकिन किसी तरह यह allright महसूस नहीं करता है। क्या ऐसा करने का एक और उचित तरीका है?

+1

दो अजगर कोड स्नैप एक ही संदर्भ 'बार length' नकल है, समान नहीं होते हैं , दूसरा 'लंबाई' ऑब्जेक्ट्स बना रहा है (माना जाता है कि 'उत्पन्न() 'प्रत्येक आमंत्रण के लिए एक नई वस्तु बनाता है) – amit

+0

हां, यह सच है अगर self.generate संदर्भ लौटा रहा है। प्रारंभ में, यह स्निपेट समकक्ष बनाने, फ्लोट लौट रहा है। फिर भी, यह पहला मामला है जिसमें मुझे रूचि है। –

उत्तर

8

मैं कर रहा हूँ नहीं अजगर डेवलपर तो मैं अपने उदाहरण गलत समझा सकता है, लेकिन जावा उदाहरण से पहचानने आप

Stream.generate(this::generate).limit(length).collect(Collectors.toList()); 

लेकिन जैसे Brian Goetz mentioned अपने दृष्टिकोण

IntStream.range(0, length).mapToObj(i->...) 

काफी प्रदर्शन करेंगे की तरह कुछ की तलाश में किया जा सकता है समानांतर में बेहतर।

+0

हाँ! यही वही है जो मैं ढूंढ रहा था। –

+3

यह दोनों और श्रेणी-उन्मुख व्यक्ति नौकरी करेंगे। हालांकि, श्रेणी-उन्मुख एक समानांतर में काफी बेहतर प्रदर्शन करेगा। –

+0

क्या होगा यदि यह :: उत्पन्न करने के लिए एक तर्क आवश्यक है? यह मेरा मामला है। –

2

सुनिश्चित नहीं हैं कि अगर यह आप के लिए किसी भी बेहतर महसूस होगा, लेकिन यहां एक तरह से एक ही प्रभाव का तरीका देखें:

Integer[] arr = new Integer[length]; 
Arrays.setAll(arr, n -> this.generate()); 
List<Integer> l = Arrays.asList(arr); 
संबंधित मुद्दे