2017-06-23 1 views
0

Il y a deux sources:Comment filtrer les mêmes éléments de deux sources

val s1 = Source(List(2, 4)) 
val s2 = Source(List(1, 2, 3, 4, 5)) 

Comment filtrer des éléments de s2 qui existaient dans s1. Par exemple ci-dessus, il sera:

val s2Filtered = Source(List(1, 3, 5)) 

Un autre cas d'utilisation:

val s1 = Source(List.empty[Int]) 
val s2 = Source(List(1, 2, 3, 4, 5)) 
val s2Filtered = Source(List(1, 2, 3, 4, 5)) // because s1 is empty 
+0

Quel genre de problèmes avez-vous rencontré lorsque vous avez essayé de mettre en œuvre ce? – Dima

+1

Les sources sont-elles toujours triées, comme dans votre exemple? –

Répondre

1

Ce n'est pas un très bon cas d'utilisation pour le streaming, comme vous allez avoir besoin d'épuiser complètement le premier flux en mémoire pour pouvoir effectuer cette opération. Sachez simplement que le premier flux doit être en mémoire pour pouvoir continuer.

Voici une façon de le faire

for{ 
    set ← s1.runFold(Set.empty[Int]){case (set, n) ⇒ set + n} 
    done ← s2.filter(set.contains).runForeach(println) 
    } yield done