'Pair items in a list with one another in Kotlin

I want to pair items in a list with one another

Example

list("A","B","C") to -> list(Pair(A,B),Pair(A,C),Pair(B,C))

list("A","B","C","D") to -> list(Pair(A,B),Pair(A,C),Pair(A,D),Pair(B,C),Pair(B,D),Pair(C,D))

I have tried using zipWithNext, but it does not help my cause. If anyone can show me how I can achieve this?



Solution 1:[1]

kotlin way )

var a = listOf("A", "B", "C", "D")

var pairs = a.mapIndexed { index, s ->
        a.slice(index + 1 until a.size).map { Pair(s, it)}
}.flatten()


print(pairs)

Solution 2:[2]

If you were looking for a Pair chaining here is how to do it:

fun main() {

    val a = listOf("A", "B", "C", "D")
    val listPair: MutableList<Pair<String, String>> = mutableListOf()

    a.forEachIndexed{ index, _ -> 
            if (index != a.size - 1) {
                val pair = Pair(a.get(index), a.get(index + 1))
                listPair.add(pair)
            }
        }

    println(listPair)
}

Result: [(A, B), (B, C), (C, D)]

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Leonidos
Solution 2 Thiago