I'd like to GroupBy the subscription details by its ProductType
with their corresponding
List<Long> planReferenceIds
key: planSubscription.productSubscription.productType
value: planSubscription.planReferenceId
I can't seem to know how to do this the 'groovy way'
private static Map<ProductType, List<Long>> buildPlanSubscriptionDetails(List<PlanSubscription> planSubscriptions) {
Map<ProductType, List<Long>> subscriptionDetails = [:]
subscriptionDetails = planSubscriptions.groupBy({it.productSubscription.productType })
return subscriptionDetails
Edit:
Here is what I've come up with but its not the Groovy way i guess
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)
}
}
thank you in advance!
You should use collectEntries
after grouping:
Map<ProductType, List<Long>> result = subscriptionDetails
.groupBy { it.productSubscription.productType }
.collectEntries { pt, sd -> [pt, sd*.planReferenceId]}