-
Notifications
You must be signed in to change notification settings - Fork 1
/
MapTest.kt
145 lines (110 loc) · 3.62 KB
/
MapTest.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
package example.com
import kotlin.test.*
class MapTest {
@Test
fun map생성(){
// 불변 Map
val immutableMap = mapOf("key1" to "value1", "key2" to "value2")
// 가변 Map
val mutableMap = mutableMapOf("key1" to "value1", "key2" to "value2")
// 빈 Map
val emptyMap = emptyMap<String, String>()
}
@Test
fun map제거(){
// 생성
val map = mutableMapOf("Chocolate" to 14, "Strawberry" to 9)
// remove
map.remove("Strawberry")
// -=
map -= "Chocolate"
}
@Test
fun map추가(){
val mutableMap = mutableMapOf<String, Int>()
// 단건 추가
mutableMap["key1"] = 1
mutableMap.put("key2", 2)
mutableMap += "key3" to 3
// 복수 추가
mutableMap.putAll(setOf("Strawberry" to 3, "Rocky Road" to 2))
mutableMap += mapOf("Maple Walnut" to 1, "Mint Chocolate" to 4)
}
@Test
fun map값가져오기(){
val map = mapOf("key1" to "value1", "key2" to "value2")
val defaultValue = "defaultValue"
// 대괄호
val value = map["key"]
// getValue 함수
val value1 = map.getValue("key") // 키가 없으면 예외 발생
// getOrElse 함수
val value2 = map.getOrElse("key") { defaultValue }
// getOrDefault 함수
val value3 = map.getOrDefault("key", defaultValue)
// for
for ((key, value) in map) {
println("$key = $value")
}
// forEach
map.forEach { (key, value) ->
println("$key = $value")
}
}
@Test
fun map루프문(){
val map = mapOf("key1" to "value1", "key2" to "value2")
// for
for ((key, value) in map) {
println("$key = $value")
}
// forEach
map.forEach { (key, value) ->
println("$key = $value")
}
}
@Test
fun map필터링(){
val map = mapOf("key1" to 1, "key2" to 2)
// filter
val filteredMap = map.filter { (key, value) -> key.length > 3 && value > 10 }
// filterKeys와 filterValues
val filteredByKeys = map.filterKeys { it.length > 3 }
val filteredByValues = map.filterValues { it > 10 }
}
@Test
fun map변환(){
val map = mapOf("key1" to 1, "key2" to 2)
// map
val transformedMap = map.map { (key, value) -> key to value.toString() }.toMap()
// mapKeys와 mapValues
val transformedKeys = map.mapKeys { it.key.toUpperCase() }
val transformedValues = map.mapValues { it.value * 2 }
}
@Test
fun map데이터가공() {
class shipment(
var flavor: String = "",
var quantity: Int = 0
)
// kotlin API 방법
val shipments = listOf(
shipment("Chocolate", 3),
shipment("Strawberry", 7),
shipment("Vanilla", 5),
shipment("Chocolate", 5),
shipment("Vanilla", 1),
shipment("Rocky Road", 10),
)
val shipmentInventory = mutableMapOf<String, Int>()
// for문을 이용하는 방식
for (shipment in shipments){
val currentQuantity = shipmentInventory[shipment.flavor] ?: 0
shipmentInventory[shipment.flavor] = currentQuantity + shipment.quantity
}
// groupBy 이용하는 방식 비교
val shipmenInventory2 = shipments
.groupBy({ it.flavor }, { it.quantity }) // 데이터 가공할 수 있다.
.mapValues { it.value.sum() } // 목록을 단일 합계로 줄인다.
}
}