Day46 of #100DaysOfCode

Kushagra Kesav
4 min readMar 24, 2022
#CodeTogether Day 46/100

Hii folks 🙌

Today I’m starting my 3rd pathway of UNIT 2 of Android Basics with Kotlin

Unit 2: Layouts

Pathway 3: Display a scrollable list

Source: https://developer.android.com/courses/android-basics-kotlin/course

Use Lists in Kotlin

Today I’m going to create and use lists in Kotlin and iterate over all items of a list and perform an action on each item.

  • We will write down the code for the Kotlin list using the library function listOf() :
fun main() {
val numbers = listOf(1, 2, 3, 4, 5, 6)
println("List: $numbers")
println("Size: ${numbers.size}")

// Access elements of the list
println("First element: ${numbers[0]}")
println("Second element: ${numbers[1]}")
println("Last index: ${numbers.size - 1}")
println("Last element: ${numbers[numbers.size - 1]}")
println("First: ${numbers.first()}")
println("Last: ${numbers.last()}")

// Use the contains() method
println("Contains 4? ${numbers.contains(4)}")
println("Contains 7? ${numbers.contains(7)}")
}
  • After running the above code we get the following output:
List: [1, 2, 3, 4, 5, 6]
Size: 6
First element: 1
Second element: 2
Last index: 5
Last element: 6
First: 1
Last: 6
Contains 4? true
Contains 7? false

The lists are read-only so we cannot reinitialize the element of the list.

  • We can also use the sorted() function to sort the list of unsorted numbers.
val oddNumbers = listOf(5, 3, 7, 1)
println("List: $oddNumbers")
println("Sorted list: ${oddNumbers.sorted()}")
List: [5, 3, 7, 1]
Sorted list: [1, 3, 5, 7]
  • We can also create a mutable list in Kotlin which can be modified after creation.
fun main() {
val entrees = mutableListOf<String>()
println("Entrees: $entrees")

// Add individual items using add()
println("Add noodles: ${entrees.add("noodles")}")
println("Entrees: $entrees")
println("Add spaghetti: ${entrees.add("spaghetti")}")
println("Entrees: $entrees")

// Add a list of items using addAll()
val moreItems = listOf("ravioli", "lasagna", "fettuccine")
println("Add list: ${entrees.addAll(moreItems)}")
println("Entrees: $entrees")

// Remove an item using remove()
println("Remove spaghetti: ${entrees.remove("spaghetti")}")
println("Entrees: $entrees")
println("Remove item that doesn't exist: ${entrees.remove("rice")}")
println("Entrees: $entrees")

// Remove an item using removeAt() with an index
println("Remove first element: ${entrees.removeAt(0)}")
println("Entrees: $entrees")

// Clear out the list
entrees.clear()
println("Entrees: $entrees")

// Check if the list is empty
println("Empty? ${entrees.isEmpty()}")
}
  • We can also use while or for loop to iterate over each item and perform an operation on each item in a list.
val guestsPerFamily = listOf(2, 4, 1, 3)
var totalGuests = 0
var index = 0
while (index < guestsPerFamily.size) {
totalGuests += guestsPerFamily[index]
index++
}

println("Total Guest Count: $totalGuests")
Total Guest Count: 10
  • In case of for loop:
val names = listOf("Jessica", "Henry", "Alicia", "Jose")
for (name in names) {
println("$name - Number of characters: ${name.length}")
}
Jessica - Number of characters: 7
Henry - Number of characters: 5
Alicia - Number of characters: 6
Jose - Number of characters: 4

We could use all the above learning to create a Kotlin program that can return the order number with the list of ordered items and the Total price of that order.

  • Here is the solution code for the above problem statement:
open class Item(val name: String, val price: Int)

class Noodles : Item("Noodles", 10) {
override fun toString(): String {
return name
}
}

class Vegetables(vararg val toppings: String) : Item("Vegetables", 5) {
override fun toString(): String {
if (toppings.isEmpty()) {
return "$name Chef's Choice"
} else {
return name + " " + toppings.joinToString()
}
}
}

class Order(val orderNumber: Int) {
private val itemList = mutableListOf<Item>()

fun addItem(newItem: Item): Order {
itemList.add(newItem)
return this
}

fun addAll(newItems: List<Item>): Order {
itemList.addAll(newItems)
return this
}

fun print() {
println("Order #${orderNumber}")
var total = 0
for (item in itemList) {
println("${item}: $${item.price}")
total += item.price
}
println("Total: $${total}")
}
}

fun main() {
val ordersList = mutableListOf<Order>()

// Add an item to an order
val order1 = Order(1)
order1.addItem(Noodles())
ordersList.add(order1)

// Add multiple items individually

val order2 = Order(2)
order2.addItem(Noodles())
order2.addItem(Vegetables())
ordersList.add(order2)

// Add a list of items at one time
val order3 = Order(3)
val items = listOf(Noodles(), Vegetables("Carrots", "Beans", "Celery"))
order3.addAll(items)
ordersList.add(order3)

// Use builder pattern
val order4 = Order(4)
.addItem(Noodles())
.addItem(Vegetables("Cabbage", "Onion"))
ordersList.add(order4)

// Create and add order directly
ordersList.add(
Order(5)
.addItem(Noodles())
.addItem(Noodles())
.addItem(Vegetables("Spinach"))
)

// Print out each order
for (order in ordersList) {
order.print()
println()
}
}
The output of the above Kotlin Code

Today I Learned:

  • Immutable and Mutable Lists in Kotlin
  • Iterating and performing operations on the lists
  • Performing sorted() and reversed() operation on the list.

That is all for Day46 ✅

Thanks for reading, See you tomorrow!

--

--