Intereting Posts
Могу ли я обновить глубоко вложенный неизменный объект, не сообщая ему о его контексте? Неявный возврат из лямбда в Котлине NullPointerException для android.support.v4.app.NotificationCompatBase $ Action.getIcon () Является ли котильское структурное равенство проверкой супер типов? Spring Boot вставляет недопустимое datetime в MariaDB, приводит к нулевому значению, а не к нулевому полю Требует ли Kotlin рамки DI? Обрезающий наблюдательный делегат Изменения в Android Studio 3.0 Kotlin не отражены в сборке Kotlin – запуск интеграционного теста, ошибка `fun main уже определена` Приведение не может быть успешным Как создать бесконечный интервал Наблюдаемый, который будет генерировать новый объект каждый временной интервал? Получить пару цифр из списка номеров в Котлин как реализовать java-интерфейс SAM в Котлине? Модульное тестирование Mockito: при всех вызовах метода класса возвращаем «true» Как получить класс выполнения переменной в Котлин?

Как плоская карта над списком объектов, которые могут иметь пустую коллекцию

Мне было трудно попытаться ответить на этот вопрос. Надеюсь, что приведенный ниже пример более выразителен.

class Foo(val bars: List<String> = ArrayList()) class FooBar(val foo: Foo, val bar: String?) fun main(args: Array<String>) { val foo1 = Foo(listOf("a", "b", "c")) val foo2 = Foo() val foo3 = Foo(listOf("d")) val foo4 = Foo() val foos = listOf(foo1, foo2, foo3, foo4) // How can I map above objects into a list of: // FooBar(foo1, "a") // FooBar(foo1, "b") // FooBar(foo1, "c") // FooBar(foo2, null) // FooBar(foo3, "d") // FooBar(foo4, null) } 

создайте метод на Foo, который возвращает коллекцию, которая содержит null, если коллекция баров пуста. затем вызовите flatMap по новому методу.

 // How can I map above objects into a list of: val fooBars: MutableList<FooBar> = ArrayList() foos.forEach { foo -> if (foo.bars.isEmpty()) { fooBars.add(FooBar(foo, null)) } else { foo.bars.forEach { bar -> fooBars.add(FooBar(foo, bar)) } } } 

Изменить: вы можете использовать flatMap следующим образом:

 val fooBars: List<FooBar> = foos.flatMap {foo -> if ( foo.bars.isEmpty() ) listOf(FooBar(foo, null)) else foo.bars.map { bar-> FooBar(foo, bar) } }