[英]implementing Map<string, List>
我需要實現Map,因為普通的hashmap不允許多個鍵值對。
def createRecommendationMap(List recommendation, Map recommendationMap)
{
if(!(allMaps.containsKey(RECOMMENDATION_MAP)))
{
recommendation.each{record ->
def javaRecord = KdTypeUtil.convertRecordFromKDTypes(record)
def key = // returns just a string
recommendationMap.put(key, javaRecord)
}
allMaps.put(RECOMMENDATION_MAP, recommendationMap)
}
return recommendationMap;
}
我在這里想念什么?
我期望的大小為9,但只能得到8的大小(重復的鍵值將被刪除)
我期望下面兩個鍵值對,但是第二對被刪除
“ NONMEDIAOUTBOUND24.0P10”:[“ CHANNEL”:“ OUTBOUND”,“ STOCK_LEVEL”:0.0,“ PRODUCT_ID”:“ SAM-STD-I9100W-1”,“ OFFER_ID”:“ FBUN-MVP-VME-VIRGIN-29- 12-05“,” P_BAND“:” P10“,” CONTRACT_LENGTH“:24.0,” INCENTIVE_POINTS“:15.0,” CUST_TYPE“:” NONMEDIA“],
“ NONMEDIAOUTBOUND24.0P10”:[“ CHANNEL”:“ OUTBOUND”,“ STOCK_LEVEL”:0.0,“ PRODUCT_ID”:“ LGE-STD-E960-1”,“ OFFER_ID”:“ FBUN-MVP-VME-VIRGIN-29- 12-05“,” P_BAND“:” P10“,” CONTRACT_LENGTH“:24.0,” INCENTIVE_POINTS“:10.0,” CUST_TYPE“:” NONMEDIA“],
看起來您正在重新實現MultiMap。 Apache Commons和Guava都已對此應用程序進行了廣泛使用和全面測試。
非常確定您可以將所有代碼替換為:
Map createRecommendationMap( List recommendation ) {
println 'inside createRecommendationMap of Maps **************** '
//If not already created, create the map. Stick to KD types, not many
//fields required.
//Keyed on Tariff type desc, commitment duration, p_band.
if( !allMaps.containsKey(RECOMMENDATION_MAP) ) {
allMaps[ RECOMMENDATION_MAP ] = recommendation.inject( [:] ) { map, r ->
def k = "${r.CUST_TYPE}${r.CHANNEL}${r.CONTRACT_LENGTH}${r.P_BAND}".toString()
def m = map[ k ]
if( !m ) {
m = []
map[ k ] = m
}
m << r
map
}
}
allMaps[ RECOMMENDATION_MAP ]
}
我在Groovy 1.5.6中運行的完整測試應用程序是:
class Test {
Map allMaps = [:]
String RECOMMENDATION_MAP = 'SOME_KEY'
Map createRecommendationMap( List recommendation ) {
println 'inside createRecommendationMap of Maps **************** '
//If not already created, create the map. Stick to KD types, not many
//fields required.
//Keyed on Tariff type desc, commitment duration, p_band.
if( !allMaps.containsKey(RECOMMENDATION_MAP) ) {
allMaps[ RECOMMENDATION_MAP ] = recommendation.inject( [:] ) { map, r ->
def k = "${r.CUST_TYPE}${r.CHANNEL}${r.CONTRACT_LENGTH}${r.P_BAND}".toString()
def m = map[ k ]
if( !m ) {
m = []
map[ k ] = m
}
m << r
map
}
}
allMaps[ RECOMMENDATION_MAP ]
}
}
def recommendation = [ ["CHANNEL":"OUTBOUND", "STOCK_LEVEL":0.0, "PRODUCT_ID":"SAM-STD-I9100W-1", "OFFER_ID":"FBUN-MVP-VME-VIRGIN-29-12-05", "P_BAND":"P10", "CONTRACT_LENGTH":24.0, "INCENTIVE_POINTS":15.0, "CUST_TYPE":"NONMEDIA"],
["CHANNEL":"OUTBOUND", "STOCK_LEVEL":0.0, "PRODUCT_ID":"LGE-STD-E960-1", "OFFER_ID":"FBUN-MVP-VME-VIRGIN-29-12-05", "P_BAND":"P10", "CONTRACT_LENGTH":24.0, "INCENTIVE_POINTS":10.0, "CUST_TYPE":"NONMEDIA"] ]
def recommendationMap = new Test().createRecommendationMap( recommendation )
recommendationMap.each { key, value ->
println key
value.each { println " $it" }
}
打印:
NONMEDIAOUTBOUND24.0P10
["CHANNEL":"OUTBOUND", "STOCK_LEVEL":0.0, "PRODUCT_ID":"SAM-STD-I9100W-1", "OFFER_ID":"FBUN-MVP-VME-VIRGIN-29-12-05", "P_BAND":"P10", "CONTRACT_LENGTH":24.0, "INCENTIVE_POINTS":15.0, "CUST_TYPE":"NONMEDIA"]
["CHANNEL":"OUTBOUND", "STOCK_LEVEL":0.0, "PRODUCT_ID":"LGE-STD-E960-1", "OFFER_ID":"FBUN-MVP-VME-VIRGIN-29-12-05", "P_BAND":"P10", "CONTRACT_LENGTH":24.0, "INCENTIVE_POINTS":10.0, "CUST_TYPE":"NONMEDIA"]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.