feeds
est une Map[String, String]
qui applique une personne sur un blog.
Ensuite, cette carte est itère avec un filter
, qui tente de filtrer tout auteur qui commence par la lettre majuscule D
et sa valeur contient le mot « pragprog ».
Lorsque vous filter
sur un Map
, vous obtenez un tuple qui a la clé en tant que premier élément et la valeur en tant que deuxième élément. En utilisant les supports ronds, il ressemble à ceci:
val filterName = feeds.filter(element => {
val (key, value) = element
key.startsWith("D") && value.contains("pragprog")
})
Notez que le filtre lui-même est un higher order function, il faut une autre fonction en entrée. Cette fonction prend un argument de type A
, qui dans notre cas est un tuple (String, String)
, et produit un booléen qui indique si l'élément correspond à la condition ou non. A l'intérieur du filtre, ils ont utilisé Déconstruction tuple:
val (key, value) = element
qui prend une méthode Tuple2[String, String]
et appelle est unapply
, vous permettant d'accéder aux composants du tuple par son nom, et non par ._1
et _.2
Eh bien, je compris que regarder le code, mais ce que je me demande est? Selon le filtre de spécification prend un prédicat (String, String) => Boolean. Dans cet esprit, que signifie val (clé, valeur) = élément? puis sur quelle valeur l'expression booléenne (startsWith touche « D ») && (valeur contient « pragprog ») est invoquée? – Gurupraveen
@Gurupraveen mis à jour la réponse à réfléchir à votre question. –
Merci, c'était une bonne explication et convaincante – Gurupraveen