我有一個這樣的清單:
val list = List<FlightRecommendationQuery>
在那里面:
data class FlightRecommendationQuery(
val segments: List<Segment>
)
data class Segment(
val stops: Int
)
我有另一個大小與 FlightRecommendationQuery 中的段大小相同的串列,稱為過濾器:
val filter = List<Filter>
data class Filter(
val stops: Int
)
當過濾器的停靠點等于串列中的每個段時,我想過濾“串列”。這里,FlightRecommendationQuery 串列“過濾器”的大小和“段”的大小是相同的。
uj5u.com熱心網友回復:
我不確定是否有更有效的方法來做到這一點,但我認為這樣做可以:
val filteredList = list.filter { it.segments.map { it.stops }.equals(filter.map { it.stops }) }
uj5u.com熱心網友回復:
如果我正確理解您的問題,這是 Kotlin 解決方案
fun main() {
// DATA SETUP
val s1 = Segment(1)
val s2 = Segment(2)
val s3 = Segment(3)
val segmentList = listOf(s1,s2,s3)
val query = FlightRecommendationQuery(segmentList)
val f1 = Filter(1)
val f2 = Filter(9999)
val f3 = Filter(3)
val filterList = listOf(f1,f2,f3)
// END OF DATA SETUP
// Here we do the filtration
val filteredSegments = mutableListOf<Segment>()
for(segmentIndex in query.segments.indices) {
// We use indices concept from Kotlin to get the items in the same
// position from both lists
val segment = query.segments[segmentIndex]
val filter = filterList[segmentIndex]
if(segment.stops == filter.stops) filteredSegments.add(segment)
}
//Filtered segments now contains the necessary data
//Will print [Segment(stops=1), Segment(stops=3)] in this case
//Use this list of segments to create a new FlightRecommendationQuery
println(filteredSegments)
}
uj5u.com熱心網友回復:
你可以做到這一點荏苒 segments,并filter與檢查是否所有的人都是平等的:
list.filter { query ->
(query.segments zip filter)
.all { it.first.stops == it.second.stops }
}
uj5u.com熱心網友回復:
其它的辦法:
list.filter { query ->
filter.indices.all { filter[it].stops == query.segments[it].stops }
}
all 如果串列的所有元素都匹配給定的謂詞,則回傳 true
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/346356.html
