Слить информацию из одного списка в другой Scala - PullRequest
0 голосов
/ 10 июля 2020

У меня есть два списка:

val generalInfo = List[GeneralInfo]
val countInfo = List[CountInfo]

case class GeneralInfo(id: String, source: String, languages: Array[String], var count: BigDecimal)
case class CountInfo(id: String, count: BigDecimal)

Каждый GeneralInfo объект инициализируется с помощью count = 0;

Мне нужно заполнить переменную count в объекте GeneralInfo с значение счетчика из объекта CountInfo, если их идентификаторы совпадают. (не все идентификаторы в списке GeneralInfo входят в список CountInfo)

Я новичок в Scala, есть ли способ сделать это элегантно без использования словаря?

1 Ответ

1 голос
/ 10 июля 2020

Если вы знаете, что существует взаимно-однозначное отношение, вы можете go через каждые CountInfo, найти соответствующий объект GeneralInfo и установить count для этого GeneralInfo.

countInfo.foreach(c => generalInfo.find(_.id == c.id).map(_.count = c.count))

Если один идентификатор может использоваться многими объектами GeneralInfo, используйте filter вместо find:

countInfo.foreach(c =>
  generalInfo.filter(_.id == c.id).foreach(_.count = c.count)
)

Вы также можете сделать это другим способом:

generalInfo.foreach(g => countInfo.find(_.id == g.id).map(c => g.count = c.count))

Демо в Scast ie

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