feeds
является Map[String, String]
, который отображает человека в блог.
Затем эта карта выполняет итерацию с помощью filter
, которая пытается отфильтровать любого автора, который начинается с заглавной буквы D
, а его значение содержит слово «pragprog».
Когда вы filter
на Map
, вы получаете кортеж, который имеет ключ как первый элемент и значение как второй элемент. Использование круглых скобок, это выглядит следующим образом:
val filterName = feeds.filter(element => {
val (key, value) = element
key.startsWith("D") && value.contains("pragprog")
})
Обратите внимание, что фильтр само по себе является higher order function, он принимает другую функцию в качестве входных данных. Эта функция принимает аргумент типа A
, который в нашем случае является кортежем (String, String)
и создает логическое значение, которое указывает, соответствует ли элемент условию или нет. Внутри фильтра, они использовали кортеж деконструкции:
val (key, value) = element
Который берет Tuple2[String, String]
и называет это unapply
метод, позволяющий получить доступ к компонентам кортежа по имени, а не через ._1
и _.2
Ну я понял что смотрит на код, но что интересно? В соответствии с фильтром spec берет предикат (String, String) => Boolean. Имея это в виду, что означает val (ключ, значение) = элемент? то на каком значении вызывается логическое выражение (key startsWith «D») && (значение содержит «pragprog»)? – Gurupraveen
@Gurupraveen Обновлен ответ, чтобы отразить ваш вопрос. –
Спасибо, это было хорошим объяснением и убедительным – Gurupraveen