필터와 맵
val fruits: List<Fruit> = listOf(
Fruit(1, "사과", 1000, 1500),
Fruit(2, "사과", 1200, null),
Fruit(3, "사과", 1100, null),
Fruit(4, "바나나", 1000, 2500),
Fruit(5, "바나나", 1500, 2500),
Fruit(6, "수박", 1500, 3500),
Fruit(7, "자두", 1000, 2500),
Fruit(8, "포도", 800, 1500),
)
val apples = fruits.filter { fruit -> fruit.name == "사과" }
val apples2 = fruits.filterIndexed { idx, fruit ->
println(idx)
fruit.name == "사과"
}
val applePrices = fruits.filter { fruit -> fruit.name == "사고" }
.map { fruit -> fruit.currentPrice }
val applePrices2 = fruits.filter { fruit -> fruit.name == "사과" }
.mapIndexed { idx, fruit ->
println(idx)
fruit.currentPrice
}
val values = fruits.filter { fruit -> fruit.name == "사과" }
.mapNotNull { fruit -> fruit.currentPrice }
private fun filterFruits(
fruits: List<Fruit>,
filter: (Fruit) -> Boolean
): List<Fruit> {
return fruits.filter(filter)
}
다양한 컬렉션 처리 기능
val isAllApple = fruits.all { fruit -> fruit.name == "사과" }
val isNoApple = fruits.none { fruit -> fruit.name == "사과 "}
val isAnyApple = fruits.any { fruit -> fruit.factoryPrice >= 10000 }
val fruitCount = fruits.count()
val sortedFruitByCurrentPriceByAscending = fruits.sortedBy { fruit -> fruit.currentPrice }
val sortedFruitByCurrentPriceByDescending = fruits.sortedByDescending { fruit -> fruit.currentPrice }
val distinctFruitNames = fruits.distinctBy { fruit -> fruit.name }.map { fruit -> fruit.name }
val firstFruit = fruits.first()
val firstOrNullFruit = fruits.firstOrNull()
val lastFruit = fruits.last()
val lastOrNullFruit = fruits.lastOrNull()
List를 Map으로
val map: Map<String, List<Fruit>> = fruits.groupBy { fruit -> fruit.name }
val map2: Map<Long, Fruit> = fruits.associateBy { fruit -> fruit.id }
val map3: Map<String, List<Long>> = fruits.groupBy(
{ fruit -> fruit.name}, { fruit -> fruit.factoryPrice}
)
val map4: Map<String, List<Fruit>> = fruits.groupBy { fruit -> fruit.name }
.filter { (key, value) -> key == "사과" }
중첩된 컬렉션 처리
val fruitsInList: List<List<Fruit>> = listOf(
listOf(
Fruit(1, "사과", 1000, 1500),
Fruit(2, "사과", 1200, 1500),
Fruit(3, "사과", 1200, 1500),
Fruit(4, "사과", 1500, 1500),
),
listOf(
Fruit(5, "바나나", 3000, 3200),
Fruit(6, "바나나", 3200, 3200),
Fruit(7, "바나나", 2500, 3200),
),
listOf(
Fruit(8, "수박", 10000, 10000)
)
)
val samePriceFruits = fruitsInList.flatMap { list ->
list.filter { fruit -> fruit.factoryPrice == fruit.currentPrice }
}
val flatFruitList = fruitsInList.flatten()