diff --git a/core-kotlin-modules/core-kotlin-collections-2/README.md b/core-kotlin-modules/core-kotlin-collections-2/README.md
new file mode 100644
index 0000000000..2dc180b5b3
--- /dev/null
+++ b/core-kotlin-modules/core-kotlin-collections-2/README.md
@@ -0,0 +1,7 @@
+## Core Kotlin Collections
+
+This module contains articles about core Kotlin collections.
+
+### Relevant articles:
+
+
diff --git a/core-kotlin-modules/core-kotlin-collections-2/pom.xml b/core-kotlin-modules/core-kotlin-collections-2/pom.xml
new file mode 100644
index 0000000000..be462eed45
--- /dev/null
+++ b/core-kotlin-modules/core-kotlin-collections-2/pom.xml
@@ -0,0 +1,47 @@
+
+
+ 4.0.0
+ core-kotlin-collections-2
+ core-kotlin-collections-2
+ jar
+
+
+ com.baeldung.core-kotlin-modules
+ core-kotlin-modules
+ 1.0.0-SNAPSHOT
+
+
+
+
+ org.jetbrains.kotlin
+ kotlin-stdlib-jdk8
+ ${kotlin.version}
+
+
+ org.apache.commons
+ commons-math3
+ ${commons-math3.version}
+
+
+ org.assertj
+ assertj-core
+ ${assertj.version}
+ test
+
+
+ org.jetbrains.kotlin
+ kotlin-test
+ ${kotlin.version}
+ test
+
+
+
+
+ 1.3.30
+ 3.6.1
+ 3.10.0
+
+
+
\ No newline at end of file
diff --git a/core-kotlin-modules/core-kotlin-collections-2/src/main/kotlin/com/baeldung/aggregate/AggregateOperations.kt b/core-kotlin-modules/core-kotlin-collections-2/src/main/kotlin/com/baeldung/aggregate/AggregateOperations.kt
new file mode 100644
index 0000000000..a09e101b59
--- /dev/null
+++ b/core-kotlin-modules/core-kotlin-collections-2/src/main/kotlin/com/baeldung/aggregate/AggregateOperations.kt
@@ -0,0 +1,107 @@
+package com.baeldung.aggregate
+
+class AggregateOperations {
+ private val numbers = listOf(1, 15, 3, 8)
+
+ fun countList(): Int {
+ return numbers.count()
+ }
+
+ fun sumList(): Int {
+ return numbers.sum()
+ }
+
+ fun averageList(): Double {
+ return numbers.average()
+ }
+
+ fun maximumInList(): Int? {
+ return numbers.max()
+ }
+
+ fun minimumInList(): Int? {
+ return numbers.min()
+ }
+
+ fun maximumByList(): Int? {
+ return numbers.maxBy { it % 5 }
+ }
+
+ fun minimumByList(): Int? {
+ return numbers.minBy { it % 5 }
+ }
+
+ fun maximumWithList(): String? {
+ val strings = listOf("Berlin", "Kolkata", "Prague", "Barcelona")
+ return strings.maxWith(compareBy { it.length % 4 })
+ }
+
+ fun minimumWithList(): String? {
+ val strings = listOf("Berlin", "Kolkata", "Prague", "Barcelona")
+ return strings.minWith(compareBy { it.length % 4 })
+ }
+
+ fun sumByList(): Int {
+ return numbers.sumBy { it * 5 }
+ }
+
+ fun sumByDoubleList(): Double {
+ return numbers.sumByDouble { it.toDouble() / 8 }
+ }
+
+ fun foldList(): Int {
+ return numbers.fold(100) { total, it ->
+ println("total = $total, it = $it")
+ total - it
+ } // ((((100 - 1)-15)-3)-8) = 73
+ }
+
+ fun foldRightList(): Int {
+ return numbers.foldRight(100) { it, total ->
+ println("total = $total, it = $it")
+ total - it
+ } // ((((100-8)-3)-15)-1) = 73
+ }
+
+ fun foldIndexedList(): Int {
+ return numbers.foldIndexed(100) { index, total, it ->
+ println("total = $total, it = $it, index = $index")
+ if (index.minus(2) >= 0) total - it else total
+ } // ((100 - 3)-8) = 89
+ }
+
+ fun foldRightIndexedList(): Int {
+ return numbers.foldRightIndexed(100) { index, it, total ->
+ println("total = $total, it = $it, index = $index")
+ if (index.minus(2) >= 0) total - it else total
+ } // ((100 - 8)-3) = 89
+ }
+
+ fun reduceList(): Int {
+ return numbers.reduce { total, it ->
+ println("total = $total, it = $it")
+ total - it
+ } // (((1 - 15)-3)-8) = -25
+ }
+
+ fun reduceRightList(): Int {
+ return numbers.reduceRight() { it, total ->
+ println("total = $total, it = $it")
+ total - it
+ } // ((8-3)-15)-1) = -11
+ }
+
+ fun reduceIndexedList(): Int {
+ return numbers.reduceIndexed { index, total, it ->
+ println("total = $total, it = $it, index = $index")
+ if (index.minus(2) >= 0) total - it else total
+ } // ((1-3)-8) = -10
+ }
+
+ fun reduceRightIndexedList(): Int {
+ return numbers.reduceRightIndexed { index, it, total ->
+ println("total = $total, it = $it, index = $index")
+ if (index.minus(2) >= 0) total - it else total
+ } // ((8-3) = 5
+ }
+}
diff --git a/core-kotlin-modules/core-kotlin-collections-2/src/test/kotlin/com/baeldung/aggregate/AggregateOperationsUnitTest.kt b/core-kotlin-modules/core-kotlin-collections-2/src/test/kotlin/com/baeldung/aggregate/AggregateOperationsUnitTest.kt
new file mode 100644
index 0000000000..a619759b0a
--- /dev/null
+++ b/core-kotlin-modules/core-kotlin-collections-2/src/test/kotlin/com/baeldung/aggregate/AggregateOperationsUnitTest.kt
@@ -0,0 +1,104 @@
+package com.baeldung.aggregate
+
+import org.junit.jupiter.api.Test
+import kotlin.test.assertEquals
+
+class AggregateOperationsUnitTest {
+
+ private val classUnderTest: AggregateOperations = AggregateOperations()
+
+ @Test
+ fun whenCountOfList_thenReturnsValue() {
+ assertEquals(4, classUnderTest.countList())
+ }
+
+ @Test
+ fun whenSumOfList_thenReturnsTotalValue() {
+ assertEquals(27, classUnderTest.sumList())
+ }
+
+ @Test
+ fun whenAverageOfList_thenReturnsValue() {
+ assertEquals(6.75, classUnderTest.averageList())
+ }
+
+ @Test
+ fun whenMaximumOfList_thenReturnsMaximumValue() {
+ assertEquals(15, classUnderTest.maximumInList())
+ }
+
+ @Test
+ fun whenMinimumOfList_thenReturnsMinimumValue() {
+ assertEquals(1, classUnderTest.minimumInList())
+ }
+
+ @Test
+ fun whenMaxByList_thenReturnsLargestValue() {
+ assertEquals(3, classUnderTest.maximumByList())
+ }
+
+ @Test
+ fun whenMinByList_thenReturnsSmallestValue() {
+ assertEquals(15, classUnderTest.minimumByList())
+ }
+
+ @Test
+ fun whenMaxWithList_thenReturnsLargestValue(){
+ assertEquals("Kolkata", classUnderTest.maximumWithList())
+ }
+
+ @Test
+ fun whenMinWithList_thenReturnsSmallestValue(){
+ assertEquals("Barcelona", classUnderTest.minimumWithList())
+ }
+
+ @Test
+ fun whenSumByList_thenReturnsIntegerValue(){
+ assertEquals(135, classUnderTest.sumByList())
+ }
+
+ @Test
+ fun whenSumByDoubleList_thenReturnsDoubleValue(){
+ assertEquals(3.375, classUnderTest.sumByDoubleList())
+ }
+
+ @Test
+ fun whenFoldList_thenReturnsValue(){
+ assertEquals(73, classUnderTest.foldList())
+ }
+
+ @Test
+ fun whenFoldRightList_thenReturnsValue(){
+ assertEquals(73, classUnderTest.foldRightList())
+ }
+
+ @Test
+ fun whenFoldIndexedList_thenReturnsValue(){
+ assertEquals(89, classUnderTest.foldIndexedList())
+ }
+
+ @Test
+ fun whenFoldRightIndexedList_thenReturnsValue(){
+ assertEquals(89, classUnderTest.foldRightIndexedList())
+ }
+
+ @Test
+ fun whenReduceList_thenReturnsValue(){
+ assertEquals(-25, classUnderTest.reduceList())
+ }
+
+ @Test
+ fun whenReduceRightList_thenReturnsValue(){
+ assertEquals(-11, classUnderTest.reduceRightList())
+ }
+
+ @Test
+ fun whenReduceIndexedList_thenReturnsValue(){
+ assertEquals(-10, classUnderTest.reduceIndexedList())
+ }
+
+ @Test
+ fun whenReduceRightIndexedList_thenReturnsValue(){
+ assertEquals(5, classUnderTest.reduceRightIndexedList())
+ }
+}
\ No newline at end of file
diff --git a/core-kotlin-modules/pom.xml b/core-kotlin-modules/pom.xml
index 8b626e1c1b..67520a7dee 100644
--- a/core-kotlin-modules/pom.xml
+++ b/core-kotlin-modules/pom.xml
@@ -21,6 +21,7 @@
core-kotlin-advanced
core-kotlin-annotations
core-kotlin-collections
+ core-kotlin-collections-2
core-kotlin-concurrency
core-kotlin-date-time
core-kotlin-design-patterns