2010-08-26 11 views
24

क्या Seq[Option[T]] -> Seq[T] को परिवर्तित करने के लिए कोई स्कैला एपीआई विधि है? अगर वहाँ एक विधि है कि सामान्य एपीआई में ऊपर करता है सोचक्या स्कैला में एक एपीआई विधि है जो एक सेक [विकल्प [टी]] सेक [टी] में परिवर्तित हो जाती है?

seq.filter(_.isDefined).map(_.get) 

:

आप के माध्यम से मैन्युअल रूप से कर सकते हैं।

+1

'filter' +' 'map' collect' जो एक पैरामीटर के रूप आंशिक समारोह लेता है कम किया जा सकता (नहीं!)। – tiran

उत्तर

41

बिल्कुल, सकारात्मक नहीं।

scala> val so1 = List(Some(1), None, Some(2), None, Some(3)) 
so1: List[Option[Int]] = List(Some(1), None, Some(2), None, Some(3)) 

scala> so1.flatten 
res0: List[Int] = List(1, 2, 3) 
+0

नहीं? (15 वर्ण) –

+2

आश्चर्यजनक रूप से so1.flapMap (आर => आर) भी काम करता है। ऐसा लगता है कि विकल्प को इस प्रकार के माध्यम से परिवर्तित किया जा सकता है: implicit def option2Iterable [ए] (xo: विकल्प [ए]): Iterable [ए] = xo.toList। जब xo.toList को केवल कुछ (एक्स) सूची मूल्य उत्पन्न होता है। कोई भी सूची नहीं देता है()। Flatmap बाकी करता है। – ssanj

+9

इतना आश्चर्यजनक नहीं है, क्योंकि 'flatMap (मजेदार)' == 'नक्शा (मजेदार) .flatten'। – Debilski

संबंधित मुद्दे