언어/Kotlin
[Kotlin] - List의 합집합, 차집합, 교집합
원석💎-dev
2022. 5. 8. 10:41
반응형
차집합
차량 리스트(cars)가 있고, 필요하지 않은 차종 리스트(carClassNotNeed)가 있다. 차량 리스트에서 필요하지 않은 차량 리스트를 제거하려면 어떻게 해야 하는가?
data class Car(
val carNumber: String,
val carClass: String,
)
val cars = listOf(
Car(carNumber = "하12345-1", carClass = "아반떼"),
Car(carNumber = "하12345-2", carClass = "아반떼"),
Car(carNumber = "하12345-3", carClass = "소나타"),
Car(carNumber = "하12345-4", carClass = "소나타 하이브리드"),
)
val carClassesNotNeed = listOf("아반떼", "소나타")
1. 가독성 안 좋지만 바로 생각해 낼 수 있는 구현 (플래그 세우기)
val filteredCars = mutableListOf<Car>()
cars.forEach { car ->
var classNotNeedYn = false
carClassesNotNeed.forEach { carClass ->
if (car.carClass == carClass) {
classNotNeedYn = true
}
}
if (!classNotNeedYn) {
filteredCars.add(car)
}
}
.... = filteredCars.toList() // mutableList는 짧게 가져가는 좋다.
println(filteredCars)
// [Car(carNumber="하12345-4", carClass="소나타 하이브리드")]
2. filter, in 사용
val filteredCars = cars.filter { car -> car.carClass !in carClassesDoNotNeed }
println(filteredCars)
// [Car(carNumber="하12345-4", carClass="소나타 하이브리드")]

교집합
val filteredCars = cars.filter { car -> car.carClass in carClassesDoNotNeed }
println(filteredCars)
// [
// Car(carNumber = "하12345-1", carClass = "아반떼"),
// Car(carNumber = "하12345-2", carClass = "아반떼"),
// Car(carNumber = "하12345-3", carClass = "소나타"),
// ]
합집합
val otherCars = listOf(
Car(carNumber = "하12345-5", carClass = "소나타"),
Car(carNumber = "하12345-6", carClass = "소나타 하이브리드"),
)
val allCars = cars + otherCars
println(allCars)
// [
// Car(carNumber = "하12345-1", carClass = "아반떼"),
// Car(carNumber = "하12345-2", carClass = "아반떼"),
// Car(carNumber = "하12345-3", carClass = "소나타"),
// Car(carNumber = "하12345-4", carClass = "소나타 하이브리드"),
// Car(carNumber = "하12345-5", carClass = "소나타"),
// Car(carNumber = "하12345-6", carClass = "소나타 하이브리드"),
// ]
반응형