Обновление
Я беззастенчиво позаимствовал ответ от TRuhland, чтобы дать эту улучшенную версию моего ответа, которая не ошибается с пустыми или одноэлементными списками:
def createTuple(words: List[String]): Map[Tuple2[String, String], Int] =
words
.zip(words.drop(1))
.groupBy(identity)
.mapValues(_.length)
Оригинал
Вы, кажется, считаете соседние пары слов списком слов. Если так, что-то вроде этого должно работать:
def createTuple(words: List[String]): Map[Tuple2[String, String], Int] =
words
.sliding(2)
.map(l => (l(0), l(1)))
.toList
.groupBy(identity)
.mapValues(_.length)
Это работает следующим образом
sliding(2)
создает список соседних пар слов
map
превращает каждую пару из List
в кортеж
groupBy
группирует кортежи с одинаковым значением
mapValues
подсчитывает количество пар с одинаковым значением для каждой пары
Это может быть не совсем то, что вы хотите, но, надеюсь, это дает представление о том, как это можно сделать.
Как правило, не перебирайте список с помощью индекса, а пытайтесь преобразовать список в нечто, где вы можете перебирать значения.
Старайтесь не создавать Map
элемент за элементом. Используйте groupBy
или toMap
.