как преобразовать карту в список коллекции, где ключ и значение карты являются полями этой коллекции? - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть класс, подобный

class BN {
val id: Long
val score: Option[Double]
}

И map: Map[Long, Option[Double]] Я хочу преобразовать карту в List[BN], где id - это ключ, а score - это значение.

Есть ли более простой способ сделать это, кроме пошагового кодирования, как в Java?

Ответы [ 2 ]

2 голосов
/ 19 сентября 2019

Класс, который вы объявили выше, является абстрактным: он объявляет 2 val поля, но не обеспечивает реализацию, этот код не будет компилироваться без модификатора abstract.Как упоминалось в комментарии @Luis, скорее всего, вам нужно объявить case case

// this is a class with 2 args
class BN(val id: Int, val score: Option[Double])

// this is a case class, depends on the usecase it might be more convenient
case class CBN(val id: Int, val score: Option[Double])

// abstract class with abstract members
abstract class ABN{
  val id: Int
  val score: Option[Double] 
}

var data = Map(1->Option(1.0), 2-> Option(2.0))

// map to case class using its automatically generated apply() method
data.map(t=> CBN(t._1, t._2))
// map regular class using 'new' keyword
data.map(t=> new BN(t._1, t._2))
// create new implementation overriding fields, don't do this in your case
data.map(t=> new ABN{val id=t._1 ; val score=t._2 })
0 голосов
/ 19 сентября 2019

Для структур данных вы действительно должны использовать case classes.

В дополнение к ответу Fenixil , вы можете добавить конструктор в объект-компаньон, чтобы скрыть уродливый материал для звонящего.

Измените на case class:

case class BN(id: Int, score: Option[Double])

Нет необходимости val с, поскольку case classes являются неизменяемыми по умолчанию.

Предоставить конструктор в companion object:

object BN {
  def apply(entry: (Int, Option[Double])):BN = 
     BN(entry._1, entry._2)
}

Использование:

val data = Map(1->Option(1.0), 2-> Option(2.0))
data.map(BN.apply)

Это дает вам: List(BN(1,Some(1)), BN(2,Some(2)))

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