Причина, вероятно, в том, что Constants.sites
является Map
, поэтому она возвращает карту.
Вместо того чтобы запускать понимание над Constants.sites
, запустите его за Constants.sites.values
, вы используете значения в любом случае.
Предпосылка, что ваш код транслируется в:
Constants.sites.flatMap {
case (_, s) =>
Source.fromFile(s"data/keywords/topkey$s.txt").getLines.map {
line =>
(s, line)
}
}
И при вызове flatMap
на Map
ваш тип полученной в результате также должен быть Map
и кортежи могут быть принуждены к Map
.
EDIT: Но использовать это должно быть прекрасно:
for {
(_, s) <- Constants.sites
line <- Source.fromFile(s"data/keywords/topkey$s.txt").getLines
) yield ((s, line))
Спасибо за реорганизованный код. Я попробовал это и обнаружил, что flatMap все еще не работает, как я ожидал. Однако, если мы изменили flatMap на карту {}, сгладим, тогда мы увидим сглаживание Seq из tuple2s. –
Я буду считать это scala трюк –
@HuCao ждать, обновил мое сообщение. «FlatMap» и «map» - это то, что Scala de-sugars «for» to. –