читать CSV на карту [String, String] - PullRequest
0 голосов
/ 19 июня 2019

Мне нужно прочитать (из входного потока) 2 столбца CSV и вернуть карту.

Файл score.txt:

player1,21
player2,99
player3,143

Нерабочий код:

Try(Source.fromInputStream(getClass.getResourceAsStream(s"$RelativePath/$fileName")).getLines().map(_.split(","))) match {
      case Success(scoreMap) => scoreMap
      case Failure(err) => //TODO add throw exception
    }

Первая строка возвращает Iterator[Array[String]], но как мне вернуть Map[String,String]?

P.S. Я пробовал различные решения "CSV to MAP" в стеке, каждое из которых выглядит так, как будто оно написано на своем собственном языке, и у всех есть ошибки, которые я не могу обернуть.

1 Ответ

0 голосов
/ 19 июня 2019

Предположим, что ваш ввод, полученный из следующей строки

Source.fromInputStream(getClass.getResourceAsStream(s"$RelativePath/$fileName")).getLines().map(_.split(","))

, имеет следующий формат

val inputArr: Iterator[Array[String]] = Array(
  Array("player1", "21"),
  Array("player2", "99"),
  Array("player3", "143")
).toIterator

Чтобы преобразовать Iterator[Array[String]] в Map[String, String], выможет написать следующую функцию

val output = inputArr.map{ arr =>
  arr(0) -> arr(1)
}.toMap

Это даст вам вывод в виде

output: scala.collection.immutable.Map[String,String] = Map(player1 -> 21, player2 -> 99, player3 -> 143)

Пожалуйста, дайте мне знать, если это отвечает на ваш вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...