Kotlin объединить два обнуляемых изменяемых списка
val mutableList1: MutableList<TeamInvitationData?>?
val mutableList2: MutableList<TeamInvitationData?>?
МетодaddAll можно использовать для слияния непостоянного изменяемого списка, но здесь он выдает ошибку времени компиляции.
Пример:
val map1 = listOne?.map { TeamInvitationData(it) }
val map2 = listTwo?.map { TeamInvitationData(it) }
map1.addAll(map2)
Ошибка интерфейса типа. Пожалуйста, попробуйте явно указать аргумент типа.
Здесь любым способом можно объединить эти два массива, заранее спасибо.
5 ответов
Вот пара решений.
В случае, если вам нужно добавить все элементы в
mutableList1
:val mutableList1: MutableList<Any?>? = ... val mutableList2: MutableList<Any?>? = ... mutableList1?.let { list1 -> mutableList2?.let(list1::addAll) }
В случае, если вам нужен новый обнуляемый список в результате:
val mutableList1: MutableList<Any?>? = ... val mutableList2: MutableList<Any?>? = ... val list3: List<Any?>? = mutableList1?.let { list1 -> mutableList2?.let { list2 -> list1 + list2 } }
В случае, если вам нужен новый обнуляемый изменяемый список в результате:
val mutableList1: MutableList<Any?>? = ... val mutableList2: MutableList<Any?>? = ... val list3: MutableList<Any?>? = mutableList1 ?.let { list1 -> mutableList2?.let { list2 -> list1 + list2 } } ?.toMutableList()
В случае, если вам нужен новый ненулевой список в качестве результата:
val mutableList1: MutableList<Any?>? = ... val mutableList2: MutableList<Any?>? = ... val list3: List<Any?> = mutableList1.orEmpty() + mutableList2.orEmpty()
Основываясь на ваших фрагментах, которые не составляют единое целое, я сделал несколько предположений относительно того, чего вы на самом деле хотели достичь:
val mutableList1: MutableList<String?>? = ...
val mutableList2: MutableList<String?>? = ...
val mapped1 = mutableList1?.mapTo(ArrayList()) { TeamInvitationData(it) }
val mapped2 = mutableList2?.mapTo(ArrayList()) { TeamInvitationData(it) }
mapped1?.addAll(mapped2.orEmpty())
Ключевой момент, на который следует обратить внимание: map()
возвращает неизменный список независимо от типа входного списка. Чтобы получить изменяемый список, вы должны использовать mapTo(destination) { ... }
, Как только это будет исправлено, вы можете использовать addAll()
как показано в последней строке.
Вы можете использовать java ArrayList, чтобы добавить все образцы ниже.
val list: MutableList<Student> = ArrayList()
list.addAll(otherListOfStudent)
Удачного кодирования :)
Ответ, данный @hluhovskyi, хороший, но есть еще одна возможность из его второго варианта, где в результате вам нужен новый список с нулевым значением:
В случае, если вам нужен новый список с нулевым значением в результате:
val mutableList1: MutableList<Any?>? = ... val mutableList2: MutableList<Any?>? "="
val list3: Список<Любой?>? = mutableList1?.let { list1 ->mutableList2?.let { list2 -> list1 + list2 } }
В этом примере, если mutableList1 пуст, у вас будет автоматически пустой список, который будет игнорироваться, если в mutableList2 есть элементы.
Итак, если вам нужна сумма двух списков и вам нужен список с нулевым значением, только если два списка равны нулю, вам нужно будет сделать:
val mutableList1: MutableList<Any?>? = ...
val mutableList2: MutableList<Any?>? = ...
val list3: List<Any?>? = mutableList1?.let { list1 ->
mutableList2?.let { list2 -> list1 + list2 }
?: list1
} ?: mutableList2
Итак, теперь у вас будет в результате:
- Нулевой список, если оба были нулевыми в начале
- Сумма обоих списков, если оба не были нулевыми
- Если один из них имеет значение null, а другой имеет элементы, он вернет список с элементами.