2011-03-14 7 views
5

में जावा सूची को पुन: सक्रिय करने में असमर्थ मैं स्कैला प्रोजेक्ट में जावा ट्विटर 4 जे लाइब्रेरी का उपयोग कर रहा हूं।स्कैला

मैं विधि

twitter.getFriendsStatuses() 

इस विधि स्थितियों युक्त twitter4j.User वस्तुओं की एक सूची देता है फोन कर रहा हूँ।

मैं उन पर पुनरावृति करने के लिए कोशिश करते हैं और यह पहला तत्व पर एक अनंत लूप में चला जाता है:

val users:List[User] = twitter.getFriendsStatuses(userId, paging.getSinceId()) 
while(users.iterator.hasNext()) { 
    println(users.iterator.next().getStatus()) 
} 

कोई भी विचार?

उत्तर

24

मुझे लगता है कि users.iterator प्रत्येक बार मूल्यांकन किए जाने पर नए पुनरावर्तक का उत्पादन करता है। इस प्रयास करें:

val it = users.iterator 
while(it.hasNext()) { 
    println(it.next().getStatus()) 
} 
+0

धन्यवाद इच्छा .asScala जोड़ने: यह रूपांतरण स्पष्ट करता है:

import scalaj.collection.Implicits._ val arrayList = new java.util.ArrayList[Int] arrayList.add(2) arrayList.add(3) arrayList.add(4) arrayList.asScala.map(_ * 2).foreach(println) 

यहाँ उपलब्ध है। मैंने इसके बारे में क्यों नहीं सोचा! :-) – Sri

8

क्या सिर्फ

या यहाँ तक कि

users.map(_.getStatus()).foreach(println _) 

साथ कुछ गड़बड़ है या, अगर आप दो बार संग्रह traversing

users.view.map(_.getStatus()).foreach(println _) 

IOW बारे में चिंतित हैं : आप पुनरावृत्ति अपनी प्रबंधन का प्रबंधन क्यों करना चाहते हैं एफ (और संभवतः गलतियां करते हैं), जब आप किसी और को आपके लिए काम करने दे सकते हैं?

+0

'दृश्य' – gpampara

+0

के उपयोग को जोड़ने के लिए +1 कुछ भी गलत नहीं है। मैंने अभी स्कैला सीखना शुरू कर दिया है। उदाहरणों के लिए धन्यवाद! पीएस: ये जावा सूचियां हैं, यह जांच लेंगे कि आपके उदाहरण काम करते हैं या नहीं। – Sri

+0

नहीं, क्षमा करें। Twitter4J मुझे एक java.util.List और .foreach, .map, .view.map बॉक्स से बाहर काम नहीं करता है। क्या इन्हें स्कैला सूचियों में परिवर्तित करने और .foreach, .map और .view का उपयोग करने के लिए कुछ साफ तरीका है? – Sri

17

यदि आप स्कैला 2.8 का उपयोग करते हैं, तो आप जावा संग्रह को स्कैला संग्रह में स्वचालित रूप से परिवर्तित करने के लिए जावाकोनवर्जन का उपयोग कर सकते हैं।

पूर्व।

import scala.collection.JavaConversions._ 

// Java Collection 
val arrayList = new java.util.ArrayList[Int] 
arrayList.add(2) 
arrayList.add(3) 
arrayList.add(4) 

// It will implicitly covert to Scala collection, 
// so you could use map/foreach...etc. 
arrayList.map(_ * 2).foreach(println) 
3

मैं scala.collection.JavaConversions को स्केलज-संग्रह पसंद करता हूं। https://github.com/scalaj/scalaj-collection

+1

मुझे स्केलज-संग्रह के बारे में पता नहीं था, लेकिन स्कैला 2.8 में, कम से कम, 'आयात scala.collection.JavaConverters._' आपको स्पष्ट' .asScala'conversions देगा यदि आप उन्हें चाहते हैं। –

+0

हाँ, मैंने इसके बारे में सुना होगा लेकिन वास्तव में JavaConverters के कार्यान्वयन को देखने का समय नहीं था। स्केलज-संग्रह बहुत साफ है, इसलिए मैं उस पर फंस गया हूं। –

1

मैं

scala.collection.JavaConverters._

उपयोग करने का सुझाव और बस हर वस्तु आप दोहराना चाहते