比較不同物件型別的兩個 ArrayList 的最優化方法是什么?假設我有一個補救措施和遵守的陣列串列,它們是:
物件A
data class Remedies(val data: List<Remedy> = emptyList()) {
data class Remedy(
val _id: String,
val remedy_id: String,
val patient_id: String,
val date_created: Long,
val is_ongoing: Boolean?,
val start_date: Long,
val medicine_id: String,
val instruction: String,
val medicine_name: String,
val medicine_type: String,
val end_date: Long,
val repeat_cycle: Int,
val allow_edit: Boolean,
//val schedule: List<Schedule>?,
val is_current: Boolean,
//val medicine: Medicine?,
val price: Float
)
}
物件B
data class Adherences(val data: List<Adherence> = emptyList()) {
data class Adherence(
val _id: String,
val adherence_id: String,
val patient_id: String,
val remedy_id: String,
val alarm_time: String,
val action: String,
val action_time: String,
val dose_discrete: String,
val dose_quantity: Int,
val note: String
)
}
我如何比較這兩個陣列串列“remedyList”和“adherencesList”,其中receive_id 是相同的,并且當remediateList 中不存在remediate_id 時洗掉adherencesList 中的專案。
uj5u.com熱心網友回復:
這應該有效:
準備輸入
data class Rdata (val r_id:String)
data class Adata (val a_id:String,val r_id:String)
val rList = (1..10).map { Rdata("$it")}
val aList = (5..20).map { Adata("foo", "$it")}
做過濾:
val rIds = rList.map { it.r_id }.toSet()
val resultList = aList.filter { it.r_id in rIds}
在此之后,resultList包含r_id5-10 個物件。(也就是11-20已經去掉了)
uj5u.com熱心網友回復:
試試這個代碼:
val allRemedies = remedies.flatMap { it.data }.associateBy { it.remedy_id }
val allAdherences = adherences.flatMap { it.data }.associateBy { it.remedy_id }
val allPairs = allAdherences.mapValues { allRemedies[it.key] to it.value }
游樂場示例
remedies是List<Remedies>并且adherences是List<Adherences>- 首先,我們將
List<Remedies>to展平List<Remedy>并將每個Remedy與其關聯remedy_id。allRemedies是Map<String, Remedy>。 - 同樣對于依從性,我們準備了一個
Map<String, Adherence> - 然后我們將 map 的每個值
allAdherences映射到一對Remedy?andAdherence。如果沒有Remedy,remedy_id它將為空。
uj5u.com熱心網友回復:
如果您只關心過濾沒有匹配補救措施的依從性,您可以remedy_id從補救措施串列中創建一組s,并使用它來有效檢查它們是否存在并對其進行過濾。
val validRemedyIds: Set<String> = remedies.data.mapTo(mutableSetOf(), Remedy::remedy_id)
val filteredAdherences = Adherences(adherences.data.filter { it.remedy_id in validRemedyIds })
如果您稍后需要匹配它們,您應該使用地圖而不是集合:
val remediesById = remedies.data.associateBy(Remedy::remedy_id)
然后有幾種方法可以組合進行比較。一個例子:
val adherencesToRemedies: List<Pair<Adherence, Remedy>> =
adherences.data.mapNotNull { remediesById[it.remedy_id]?.run { it to this } }
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/372088.html
