मेरे पास Stream[A] और एक फ़ंक्शन zeroOrMoreB(value: A): Seq[B] है, जिसने A शून्य या अधिक B दिया है। इन दो टुकड़ों से, मैं Stream[B] कैसे बनाऊं?

मैं Stream[Stream[B]] प्राप्त कर सकता हूं (नीचे देखें), लेकिन मैं यह नहीं समझ सकता कि इसे कैसे समतल किया जाए।

stream <- ZStream
  .fromIterable(vectorOfAs)
  .map(zeroOrMoreB)
0
RandomBits 28 अक्टूबर 2020, 20:10

2 जवाब

सबसे बढ़िया उत्तर

जैसा कि मैं हमेशा कहता हूं, स्कैलाडोक आपका मित्र है।

आप mapConcat का उपयोग कर सकते हैं

val stream = ZStream.fromIterable(vectorOfAs).mapConcat(zeroOrMoreB)

अब यदि zeroOrMoreB वास्तव में Seq के बजाय एक ZStream देता है, तो आप flatMap का उपयोग करते हैं

val stream = ZStream.fromIterable(vectorOfAs).flatMap(zeroOrMoreB)

अंत में, यदि आपको वाक्य रचना के लिए पसंद है तो आप ऐसा कर सकते हैं

val stream = for {
  a <- ZStream.fromIterable(vectorOfAs)
  b <- ZStream.fromIterable(zeroOrMoreB(a))
} yield b
3
Luis Miguel Mejía Suárez 28 अक्टूबर 2020, 17:18

मैं स्पष्ट रूप से सीधे नहीं सोच रहा था - .flatMap चाल करता है।

stream <- ZStream
  .fromIterable(vectorOfAs)
  .flatMap(a => zeroOrMoreB(a))
0
RandomBits 28 अक्टूबर 2020, 17:18