Создать новый ArrayList из существующих ArrayList с некоторыми условиями - PullRequest
1 голос
/ 16 октября 2019

У меня есть ArrayList с некоторыми символами и другой массив с некоторыми числами. Я хочу создать новый ArrayList, присоединившись к ним.

val mList = arrayListOf(
    "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"
)

val aList = arrayListOf(
    "1", "2", "3", "4", "5"
)

Я хочу вывод ниже после объединения

["a", "1"], ["b","2"], ["c", "3"], ["d", "4"], ["e", "5"], ["f", "1"], ["g","2"], ["h", "3"], ["i", "4"], ["j", "5"], ["k", "1"]

Пожалуйста, помогите

Ответы [ 3 ]

0 голосов
/ 16 октября 2019

Принятый ответ будет работать , только если первый список больше .

Другой, безразличный к размерам подход заключается в использовании модуля по обоим спискам:

val mList = arrayListOf(
    "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"
)

val aList = arrayListOf(
    "1", "2", "3", "4", "5"
)

fun main() {
    val combinedList: List<Pair<String, String>> = 
        (0 until max(mList.size, aList.size)) // generate indices
            .map { index -> mList[index % mList.size] to aList[index % aList.size] } // convert indices to actual pairs

    // use the combined-list like this:
    val pair = combined[0]
    println(pair.first) // "a"
    println(pair.second) // "1"

    // or this:
    combined.forEach {
        println("${it.first}, ${it.second}")
    }    

    // if you want a mutable list (for adding\removing pairs yourslef), you can type:
    val mutableCombinedList: MutableList<Pair<String, String>> = combinedList.toMutableList()
    // and then you can add\remove pairs:
    mutableCombinedList += ("r" to "99")
    mutableCombinedList -= ("a" to "1")
}
0 голосов
/ 17 октября 2019

Для полноты, другая опция использует mapIndexed функцию:

val combined = mList.mapIndexed { index, value -> value to aList[index % aList.size] }
println(combined) 
// output: [(a, 1), (b, 2), (c, 3), (d, 4), (e, 5), (f, 1), (g, 2), (h, 3), (i, 4), (j, 5), (k, 1)]
0 голосов
/ 16 октября 2019

Вы найдете хорошее использование forEachIndexed(action: (index: Int, T) -> Unit): Unit и оператора модуля (%) в этом случае. Вы можете сделать так:

val mList = arrayListOf(
    "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"
)

val aList = arrayListOf(
    "1", "2", "3", "4", "5"
)

fun main() {
    val arrayList = arrayListOf<ArrayList<String>>()
    mList.forEachIndexed { index, s -> arrayList.add(arrayListOf(s, aList[index % aList.size])) }
    println(arrayList) // [[a, 1], [b, 2], [c, 3], [d, 4], [e, 5], [f, 1], [g, 2], [h, 3], [i, 4], [j, 5], [k, 1]]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...