kotlinbeginner
Collection Builders — buildList, buildMap, buildSet
Build collections conditionally and dynamically with Kotlin collection builders.
kotlinPress ⌘/Ctrl + Shift + C to copy
data class User(val name: String, val role: String, val active: Boolean)
fun main() {
val isAdmin = true
val showInactive = false
val searchQuery = "ali"
// buildList — conditional items
val menuItems = buildList {
add("Home")
add("Profile")
if (isAdmin) {
add("Admin Panel")
add("User Management")
}
add("Settings")
add("Logout")
}
println("Menu: $menuItems")
// buildMap — dynamic entries
val config = buildMap<String, Any> {
put("host", "localhost")
put("port", 8080)
put("debug", false)
System.getenv("APP_ENV")?.let { put("env", it) }
if (isAdmin) put("adminMode", true)
}
println("Config: $config")
// buildSet — unique items
val permissions = buildSet {
add("read")
add("write")
if (isAdmin) {
addAll(listOf("delete", "manage", "audit"))
}
}
println("Permissions: $permissions")
// Complex conditional building
val users = listOf(
User("Alice", "admin", true),
User("Bob", "user", false),
User("Charlie", "user", true),
User("Diana", "admin", true)
)
val filteredUsers = buildList {
addAll(users.filter { it.active || showInactive })
if (searchQuery.isNotBlank()) {
retainAll { it.name.contains(searchQuery, ignoreCase = true) }
}
}
println("Filtered: $filteredUsers")
// Build SQL-like query parts
val conditions = buildList {
add("active = true")
if (searchQuery.isNotBlank()) add("name LIKE '%$searchQuery%'")
if (isAdmin) add("role = 'admin'")
}
val sql = "SELECT * FROM users WHERE ${conditions.joinToString(" AND ")}"
println("SQL: $sql")
// Nested collection building
val groups = buildMap<String, List<User>> {
users.groupBy { it.role }.forEach { (role, roleUsers) ->
put(role, buildList {
addAll(roleUsers.filter { it.active })
sortBy { it.name }
})
}
}
groups.forEach { (role, users) ->
println("$role: ${users.map { it.name }}")
}
// buildString (related pattern)
val report = buildString {
appendLine("=== User Report ===")
users.forEach { user ->
append(" ${user.name}")
append(" (${user.role})")
if (!user.active) append(" [INACTIVE]")
appendLine()
}
appendLine("Total: ${users.size}")
}
println(report)
}Use Cases
- Conditional list/map construction
- Dynamic configuration building
- SQL query part assembly
Tags
Related Snippets
Similar patterns you can reuse in the same workflow.
kotlinbeginner
Scope Functions — let, run, apply, also, with
Master Kotlin scope functions: when to use let, run, apply, also, and with for concise code.
Best for: Object initialization and configuration
#kotlin#scope-functions
kotlinbeginner
Collections — map, filter, groupBy, and More
Master Kotlin collections: functional transformations, aggregations, grouping, and partition operations.
Best for: Data processing and transformation pipelines
#kotlin#collections
kotlinbeginner
Destructuring Declarations
Destructure objects into variables: data classes, maps, pairs, and custom componentN operators.
Best for: Clean variable extraction from complex objects
#kotlin#destructuring
kotlinintermediate
Map Operations — Transform, Merge, Group
Advanced map operations: groupBy, associate, flatMap, merge strategies, and map transformations.
Best for: Data aggregation and grouping
#kotlin#collections