Контекст
При использовании декларативного подхода в Kotlin необходимо скопировать одно свойство name
из List
из User
объектов в List
из UserDetail
объектов на основе сопоставления id
свойства, как показано ниже:
val users = Arrays.asList(
User(1, "a"),
User(2, "b")
)
val details = Arrays.asList(
UserDetail(1),
UserDetail(2)
)
val detailsWithName = copyNameToUser(users, details)
Модели:
class User {
var id = -1;
var name = "" // given for all Users
constructor(id: Int, name: String)
// ...
}
class UserDetail {
var id = -1;
var name = "" // blank for all UserDetails
constructor(id: Int)
// ...
}
Задача
Попытка использовать декларативный подход с помощью итерационной функции forEach
:
fun copyNameToDetails(users: List<User>, details: List<UserDetail>): List<UserDetail> {
details.forEach(d ->
users.forEach(u ->
if (d.id == u.id) {
d.name = u.name
}
)
)
return details
}
Это может быть достигнуто в Java, как показано ниже:
private static List<UserDetail> copyNameToDetails(List<User> users, List<UserDetail> details) {
for (UserDetail d: details) {
for (User u : users) {
if (d.id == u.id) {
d.name = u.name;
}
}
}
return details;
}
Вопрос
Как это можно сделать в Kotlin, используя декларативный подход?