언어/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 = "소나타 하이브리드"),
// ]

 

반응형