android - 如何对 Kotlin 列表中的项目进行分组和求和
问题描述
我有一个 dataClass OrderInProgress 列表,我需要对类似产品的价格求和并计算它们以返回 CartDetail 列表,类似于房间数据库中的查询。我该怎么做?
@Entity(tableName = "order_in_progress")
data class OrderInProgress(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "id")
var id: Int = 0,
@ColumnInfo(name = "product")
var product: String,
@ColumnInfo(name = "price")
var price: Double
)
data class CartDetail(
@ColumnInfo(name = "product")
val product: String,
@ColumnInfo(name = "sum_price")
val sumPrice: Double,
@ColumnInfo(name = "product_count")
val productCount: Int
)
这是房间查询
@Query(
"SELECT product, SUM(price) as sum_price, COUNT(product) as product_count " +
"FROM order_in_progress GROUP BY product"
)
fun getCart(): Flow<List<CartDetail>?>
解决方案
尝试以下代码段:
fun getCartDetails(orders: List<OrderInProgress>): List<CartDetail> {
return orders.groupBy { it.product }.map { entry ->
val productType = entry.key
val products = entry.value
CartDetail(
productType,
products.map { it.price }.reduce { acc, price -> acc + price },
products.size
)
}
}
它使用 group by 将相似产品关联到类型映射中Map<String, List<OrderDetails>>
,然后将每个条目映射到CartDetail
使用 reducer 函数对相似产品的价格求和的 a。
推荐阅读
- javascript - 如何使用带有多个DIV的javascript方法.after
- c# - C# XML 文档 '
'标签没有出现在智能感知中? - qt - QT5 中的 QwtPlotZoomer 崩溃
- javascript - 如何将动态数据加载到 react-native-chart-kit?
- python-3.x - Sized、Iterable 和 Container 的 Python 类型提示
- javascript - 在下面而不是右边开始一个新行
- mysql - 如何配置Mysql以避免错误:Illegal mix of collations
- python - 即使我用 int32 或 float32 编辑 dtype,我如何修复尺寸我得到同样的错误?
- java - 单元测试 - 无法加载 ApplicationContext
- sql - VBA 过程中的 SQL 子句帮助