Groovy中的GroupBy

问题描述 投票:0回答:1

我想按订阅的详细信息进行分组,通过它的 ProductType 与其相应 List<Long> planReferenceIds

键。planSubscription.productSubscription.productType

值: planSubscription.planReferenceId

我不知道怎么用 "好的方法 "来做这件事

private static Map<ProductType, List<Long>> buildPlanSubscriptionDetails(List<PlanSubscription> planSubscriptions) {
        Map<ProductType, List<Long>> subscriptionDetails = [:]

        subscriptionDetails = planSubscriptions.groupBy({it.productSubscription.productType })

        return subscriptionDetails

编辑。

这是我想出来的,但它不是Groovy的方式,我猜。

planSubscriptions.each { PlanSubscription planSubscription ->
            List<Long> planRefIds = subscriptionDetails.get(planSubscription.productSubscription.productType)

            if (planRefIds) {
                planRefIds.add(planSubscription.planReferenceId)
            } else {
                subscriptionDetails.put(planSubscription.productSubscription.productType, [planSubscription.planReferenceId] as List)
            }
        }

先谢谢你

java grails groovy
1个回答
3
投票

您应该使用 collectEntries 分组后,。

Map<ProductType, List<Long>> result = subscriptionDetails
        .groupBy { it.productSubscription.productType }
        .collectEntries { pt, sd ->  [pt, sd*.planReferenceId]}
© www.soinside.com 2019 - 2024. All rights reserved.