Я изо всех сил пытался найти способ сохранить верность функциональному стилю в выражениях, когда мне нужно собрать несколько параметров объекта в список.
В качестве примера предположим, что у меня есть объект уведомления, который имеет как fromId (идентификатор пользователя, от которого отправлено уведомление), так и objectOwnerId (идентификатор пользователя, создавшего исходный объект). Они могут отличаться уведомлениями в стиле facebook («X также прокомментировал сообщение Y»).
Я могу собрать идентификаторы пользователей с помощью выражения for, подобного такому
val userIds = for { notification <- notifications } yield notification.fromId
, однако скажу, что я хочу собрать идентификаторы fromIds и objectOwnerIds в один список, есть ли способ сделать это в одном выражении for без пользователя vars?
Я делал что-то подобное в прошлом:
var ids = List()
for {
notification <- notifications
ids = ids ++ List(notification.fromId, notification.objectOwnerId)
}
ids = ids.distinct
но мне кажется, что должен быть способ получше. Использование var и необходимость вызывать отличное после того, как я завершу сбор, уродливы. Я мог бы избежать отдельного с помощью некоторых условных выражений, но я пытаюсь изучить правильные функциональные методы, чтобы делать что-то.
Заранее благодарим за любую помощь!