在这个例子中,我必须上课。
Order(selections: List<Selection>, discount: Double, ...)
Selection(productId: Long, price: Double, ...)
然后,我继续收集我想要计算价格的Order
,需要使用Selection's price
和Order's discount
。我怎么能这样做?
我尝试做以下事情,但似乎不可能。
val orderList: List<Order> = loadFromDB()
orderList.map { Pair(it.selections, it.discount) }
.flatMap { /* Here I want to get list of Pair of selection from all orders with discount. */}
一旦我收集了Pair(Selection, discount)
,我就可以继续进一步计算了。
这可能以这种形式吗?我需要将链条分开吗?
答案 0 :(得分:7)
要获得Pairs列表,您可以执行以下操作:
orderList.flatMap { order -> //flatMap joins multiple lists together into one
order.selections.map { selection -> //Map every selection into a Pair<Selection, Discount>
Pair(selection, order.discount) }
.map { pair -> /* Do your stuff here */ }
答案 1 :(得分:0)
@ D3xter的答案的替代语法,使用了更多的Kotlin糖:
1 orderList
2 .flatMap { order ->
3 order.selections.map { selection ->
4 order.discount to selection.price }
5 .map { (discount, price) -> ... }
这利用了Kotlin的两个功能:
Pair
的“工厂功能” discount
和price