fun main() {
val people = listOf(Person("Alice", 29), Person("Bob", 31))
println(people.filter { it.age >= 30 })
// [Person(name=Bob, age=31)]
}fun main() {
val people = listOf(Person("Alice", 29), Person("Bob", 31))
println(people.map { it.name })
// [Alice, Bob]
}
// 맴버 참조를 사용한 코드 간소화
poeple.map(Person::name)fun main() {
val numbers = listOf(1, 2, 3, 4, 5, 6, 7)
val filtered = numbers.filterIndexed { index, element ->
index % 2 == 0 && element > 3
}
println(filtered)
//[5, 7]
val mapped = numbers.mapIndexed { index, element ->
index + element
}
println(mapped)
//[1, 3, 5, 7, 9, 11, 13]
}data class Person (val name: String, val age: Int)
fun main() {
val numbers = mapOf(0 to "zero", 1 to "one")
println(numbers.mapValues { it.value.uppercase() })
//{0=ZERO, 1=ONE}
}
fun main() {
val list = listOf(1, 2, 3, 4)
println(list.reduce { acc, element ->
acc + element
})
// 10
println(list.reduce { acc, element ->
acc * element
})
// 24
}
fun main() {
val people = listOf(
Person("Alex", 29),
Person("Natalia", 28)
)
val folded = people.fold("") { acc, person ->
acc + person.name
}
println(folded)
// AlexNatalia
}
연산 중간 단계의 값 뽑아내기: runningReduce, runningFold
fun main() {
val list = listOf(1, 2, 3, 4)
val summed = list.runningReduce { acc, element ->
acc + element
}
println(summed)
// [1, 3, 6, 10]
val multiplied = list.runningReduce { acc, element ->
acc * element
}
println(multiplied)
// [1, 2, 6, 24]
val people = listOf(
Person("Alex", 29),
Person("Natalia", 28)
)
println(people.runningFold("") { acc, person ->
acc + person.name
})
// [, Alex, AlexNatalia]
}
val canBeInClub27 = { p: Person -> p.age <= 27 }
fun main( ){
val people = listOf(Person("Alice", 27), Person("Bob",31))
println(people.all(canBeInClub27))
// false
}val canBeInClub27 = { p: Person -> p.age <= 27 }
fun main( ){
val people = listOf(Person("Alice", 27), Person("Bob",31))
println(people.any(canBeInClub27))
// true
}data class Person (val name: String, val age: Int)
val canBeInClub27 = { p: Person -> p.age <= 27 }
fun main( ){
val people = listOf(Person("Alice", 27), Person("Bob",31))
println(people.none(canBeInClub27))
// false
}val canBeInClub27 = { p: Person -> p.age <= 27 }
fun main( ){
val people = listOf(Person("Alice", 27), Person("Bob",31))
println(people.count(canBeInClub27))
// 1
}val canBeInClub27 = { p: Person -> p.age <= 27 }
fun main( ){
val people = listOf(Person("Alice", 27), Person("Bob",31))
println(people.find(canBeInClub27))
// Person(name=Alice, age=27)
}val canBeInClub27 = { p: Person -> p.age <= 27 }
fun main( ){
val people = listOf(Person("Alice", 26),
Person("Bob",29),
Person("Carol", 31)
)
val comeIn = people.filter(canBeInClub27)
val stayOut = people.filterNot(canBeInClub27)
println(comeIn)
// [Person(name=Alice, age=26)]
println(stayOut)
// [Person(name=Bob, age=29), Person(name=Carol, age=31)]
}val canBeInClub27 = { p: Person -> p.age <= 27 }
fun main( ){
val people = listOf(Person("Alice", 26),
Person("Bob",29),
Person("Carol", 31)
)
val (comeIn, stayOut) = people.partition(canBeInClub27)
println(comeIn)
// [Person(name=Alice, age=26)]
println(stayOut)
// [Person(name=Bob, age=29), Person(name=Carol, age=31)]fun main( ){
val people = listOf(
Person("Alice", 31),
Person("Bob", 29),
Person("Carol", 31)
)
println(people.groupBy { it.age })
//Map<Int, List<Person>>
// {31=[Person(name=Alice, age=31), Person(name=Carol, age=31)],
// 29=[Person(name=Bob, age=29)]}
}fun main( ){
val people = listOf("apple", "apricot", "banana", "cantaloupe")
println(people.groupBy(String::first))
// {a=[apple, apricot], b=[banana], c=[cantaloupe]}
}
fun main() {
val people = listOf(Person("Joe", 22), Person("Mary", 31))
val nameToAge = people.associate { it.name to it.age }
println(nameToAge)
// {Joe=22, Mary=31}
println(nameToAge["Joe"])
// 22
}fun main() {
val people = listOf(
Person("Joe", 22),
Person("Mary", 31),
Person("Jamie", 22)
)
val personToAge = people.associateWith { it.age }
println(personToAge)
// {Person(name=Joe, age=22)=22, Person(name=Mary, age=31)=31, Person(name=Jamie, age=22)=22}
val ageToPerson = people.associateBy { it.age }
println(ageToPerson)
//{22=Person(name=Jamie, age=22), 31=Person(name=Mary, age=31)}
}
맵의 키 → 유일해야함
fun main() {
val names = mutableListOf("Martin", "Samuel")
println(names)
// [Martin, Samuel]
names.replaceAll { it.uppercase() }
println(names)
// [MARTIN, SAMUEL]
names.fill("(redacted)")
println(names)
// [(redacted), (redacted)]
}
fun main() {
val empty = emptyList<String>()
val full = listOf("apple", "orange", "banana")
println(empty.ifEmpty { listOf("no", "values", "here") })
// [no, values, here]
println(full.ifEmpty { listOf("no", "values", "here") })
// [apple, orange, banana]
}fun main() {
val blankName = " "
val name = "J. Doe"
println(blankName.ifEmpty { "(unnamed)" })
//
println(blankName.ifBlank{ "(unnamed)" })
// (unnamed)
println(name.ifBlank { "(unnamed)" })
// J. Doe
}fun main() {
val temperatures = listOf(27.7, 29.8, 22.0, 35.5, 19.1)
println(temperatures.windowed(3))
// [[27.7, 29.8, 22.0], [29.8, 22.0, 35.5], [22.0, 35.5, 19.1]]
println(temperatures.windowed(3) { it.sum() / it.size})
// [26.5, 29.099999999999998, 25.53333333333333]
}
fun main() {
val temperatures = listOf(27.7, 29.8, 22.0, 35.5, 19.1)
println(temperatures.chunked(2))
// [[27.7, 29.8], [22.0, 35.5], [19.1]]
println(temperatures.chunked(2) { it.sum() })
// [57.5, 57.5, 19.1]
}
fun main() {
val names = listOf("Joe", "Mary", "Jamie")
val ages = listOf(22, 31, 31, 44, 0)
println(names.zip(ages))
// [(Joe, 22), (Mary, 31), (Jamie, 31)]
println(names.zip(ages) { name, age -> Person(name, age) })
// [Person(name=Joe, age=22), Person(name=Mary, age=31), Person(name=Jamie, age=31)]
}
println(names zip ages)val countries = listOf("DE", "NL", "US")
println(name zip ages zip countries)
// [((Joe, 22), DE), ((Mary, 31), NL), ((Jamie, 31), US)]class Book(val title: String, val authors: List<String>)
val library = listOf(
Book("Kotiln in Action", listOf("Isakova", "Elizarov", "Aigner", "Jemerov")),
Book("Atomic Kotlin", listOf("Eckel", "Isakova")),
Book("The Three-Body Problem", listOf("Liu"))
)
fun main() {
val authors = library.flatMap { it.authors }
println(authors) // 라이브러리의 모든 저자의 리스트
// [Isakova, Elizarov, Aigner, Jemerov, Eckel, Isakova, Liu]
println(authors.toSet()) // 라이브러리의 모든 저자의 집합 (중복 없음)
// [Isakova, Elizarov, Aigner, Jemerov, Eckel, Liu]
}