EDIT: Я нашел это What is Scala's yield? (особенно второй, самый популярный, ответ), чтобы быть очень поучительным после того, как принятый ответ решил мою проблему.Для цикла внутри .map() в scala: return type is "Unit"
==
У меня есть HashMap, которые я хочу итерацию в, и для каждого из ключей, использовать цикл для создания новых объектов.
Я пытаюсь получить список этих новых объектов, но мне всегда возвращается пустая последовательность «Единица». Я хотел бы лучше понять поведение моего кода.
case class MyObject(one: String, two: String, three: Int)
val hm = new HashMap[String,Int]
hm += ("key" -> 3)
hm += ("key2" -> 4)
val newList = hm.map { case (key,value) =>
for (i <- 0 until value) {
new MyObject(key, "a string", i)
}}.toSeq
результат:
newList:Seq[Unit] = ArrayBuffer((),())
Если я не использую любой цикл внутри .map(), у меня есть тип структуры я ожидал:
val newList = hm.map { case (key,value) =>
new MyObject(key, "a string", value)}.toSeq
результаты:
newList:Seq[MyObject] = ArrayBuffer(MyObject(key,host,3), MyObject(key2,host,4))
Какой результат вы ожидали? – Bergi
Вы не указали ключевое слово 'yield' в своем заявлении' map' – cmbaxter