Skip to content

Commit 083d357

Browse files
[KTLN-675] Iterate a Collection Referencing Previous Element in Kotlin (#845)
* added unit tests * fixed code * fixed code * made code fixes * code fixes
1 parent 78c720a commit 083d357

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package com.baeldung.referenceLastElementDuringIteration
2+
3+
import org.junit.jupiter.api.Assertions.assertEquals
4+
import org.junit.jupiter.api.Test
5+
6+
class ReferenceLastElementDuringIterationUnitTest {
7+
8+
@Test
9+
fun `creates new list by adding elements from original list using loop`() {
10+
val list = listOf(1, 2, 3, 4, 5)
11+
val expectedList = listOf("1","12", "23", "34", "45")
12+
13+
assertEquals(expectedList, iterateListUsingLoop(list))
14+
}
15+
16+
@Test
17+
fun `creates new list by adding elements from original list using fold method`() {
18+
val list = listOf(1, 2, 3, 4, 5)
19+
val expectedList = listOf("1", "12", "23", "34", "45")
20+
21+
assertEquals(expectedList, iterateListUsingFoldIndexed(list))
22+
}
23+
@Test
24+
fun `creates new list by adding elements from original list using zipWitNnext method`() {
25+
val list = listOf("1", "2", "3", "4", "5")
26+
val expectedList = listOf("1", "12", "23", "34", "45")
27+
28+
val result = (list.take(1) + list.zipWithNext { a, b -> "$a$b" })
29+
30+
assertEquals(expectedList, result)
31+
}
32+
33+
@Test
34+
fun `creates new list by adding elements from original list using scan method`() {
35+
val list = listOf(1, 2, 3, 4, 5)
36+
val expectedList = listOf("1", "12", "23", "34", "45")
37+
val result = list.drop(1).scan(list.first().toString()) { acc, i -> acc.takeLast(1) + i }
38+
39+
assertEquals(expectedList, result)
40+
}
41+
}
42+
fun iterateListUsingLoop(list: List<Int>): List<String> {
43+
val newList = mutableListOf<String>()
44+
newList.add(list[0].toString())
45+
for (i in 1 until list.size) {
46+
newList.add("${list[i - 1]}${list[i]}")
47+
}
48+
return newList
49+
}
50+
51+
fun iterateListUsingFoldIndexed(list: List<Int>): List<String> {
52+
return list.foldIndexed(mutableListOf()) { i, acc, element ->
53+
if(i==0)
54+
acc.add(element.toString())
55+
if (i > 0) {
56+
acc.add("${list[i - 1]}$element")
57+
}
58+
acc
59+
}
60+
}

0 commit comments

Comments
 (0)