Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实施Map<;字符串,列表>;_Java_Groovy - Fatal编程技术网

Java 实施Map<;字符串,列表>;

Java 实施Map<;字符串,列表>;,java,groovy,Java,Groovy,我需要实现Map,因为普通hashmap不允许多个键值对 def createRecommendationMap(List recommendation, Map recommendationMap) { if(!(allMaps.containsKey(RECOMMENDATION_MAP))) { recommendation.each{record -> def javaRec

我需要实现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(删除重复的键值)

我期待下面两个键值对,但第二个键值对正在被删除

“非中间出界24.0P10”:[“通道”:“出站”,“库存水平”:0.0, “产品标识”:“SAM-STD-I9100W-1”, “报价ID”:“FBUN-MVP-VME-VIRGIN-29-12-05”,“P_乐队”:“P10”, “合同长度”:24.0,“奖励分数”:15.0, “客户类型”:“非媒体”]

“非中间出界24.0P10”:[“通道”:“出站”,“库存水平”:0.0, “产品标识”:“LGE-STD-E960-1”, “报价ID”:“FBUN-MVP-VME-VIRGIN-29-12-05”,“P_乐队”:“P10”, “合同长度”:24.0,“奖励分数”:10.0, “客户类型”:“非媒体”]


看起来你正在重新实现一个多重映射。和都已广泛使用并彻底测试了这方面的实现。

非常确定您可以用以下代码替换所有代码:

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 ]
}

什么是所有地图?你能提供一些输入数据和预期结果吗?嗨,蒂姆,用示例编辑了这个问题。你有一些示例输入吗?另外,什么是
allMaps
?您好,值(渠道、库存水平等)来自DB,对于客户(如果他在特定的值区域),我需要提取值。对于channel=OUTBOUND、custype=NONMEDIA、contractLength=24.0和pBand=P10的值,有两个关联的值,但在我使用map时,第二个值将从map中删除…如果我在编码中无法做到这一点,将尝试包含apache commons jar并对其进行chck。添加了一个可能的解决方案。。。很难说没有额外的信息,但我认为它是正确的…嗨,蒂姆,希望这与GDk的1.5.6版本一起工作…相同的旧限制:-)我已经检查过了,我认为它是好的<代码>映射。默认情况下,表示它从1.0开始就存在,因此,
inject
;-)我的allMaps声明是def allMaps=[:]让我尝试返回you@Techie祈祷吧…;-)
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"]