【问题标题】:Mapping list to Map not working映射列表到地图不起作用
【发布时间】:2014-03-18 13:15:45
【问题描述】:

我有一张地图

["name1":["field1":value1, "field2":value2, "field3":value3], “名称 2”:[“字段 1”:值 4,“字段 2”:值 5,“字段 3”:值 6], "name3":["field1":value7, "field2":value8, "field3":value9]]

还有一个列表

[名称1,名称3]

我想要一个结果

["name1":["field1":value1, "field2":value2, "field3":value3], "name3":["field1":value7, "field2":value8, "field3":value9]]

使用的代码

result = recomendationOffers.inject( [:] ) { m, v ->
                if( !m[ v ] ) {
                    m[ v ] = []
                }
                m[ v ] << tariffRecMap[ v.toString() ]
                m
                }

现在 name1 的数据类型从 Varchar2(35) 更改为 number(10)。

我希望相同的逻辑可以工作,但它不工作,我得到了价值

["name1":[null], "name3":[null]]

1000000959 等值也显示为 1.000000959E9,这有什么区别吗?

发布原始值

当我处理 string 时,它看起来如下所示

["FBUN-WEB-VIRGIN-10-24-08":["FIXEDLN_ALLOWANCE":0.0, "OFFER_VERSION_ID":1.000013082E9, "OFFER_TYPE_DESC":"合同", "OFFER_NAME":"PM_V 10 50+250 CA", "SMS_ALLOWANCE":250.0, “VM_TARIFF_FLAG”:“N”,“IPHONE_IND”:“N”,“OFFER_MRC”:10.5, "ALLOWANCE08":0.0, "DATA_ALLOWANCE":524288.0, "BB_IND":"N", "CONTRACT_TERM":24.0, "OFFER_CODE":"FBUN-WEB-VIRGIN-10-24-08", "ONNET_TEXT_ALLOWANCE":0.0, "VOICE_ALLOWANCE":50.0, "MMS_ALLOWANCE":0.0, "ONNET_ALLOWANCE":0.0],

现在,在数据库数据类型从 varchar 更改为 number 后,它看起来如下所示,其中 DB 中的值为 1000010315

[1.000010315E9:["FIXEDLN_ALLOWANCE":0.0, "OFFER_VERSION_ID":1.000010315E9, "OFFER_TYPE_DESC":"Sup 语音", "OFFER_NAME":"VIP - 35 c", "SMS_ALLOWANCE":60000.0, “VM_TARIFF_FLAG”:“N”,“IPHONE_IND”:“N”,“OFFER_MRC”:35.0, “ALLOWANCE08”:45000.0,“DATA_ALLOWANCE”:2.147483648E9,“BB_IND”:“N”, "CONTRACT_TERM":24.0, "OFFER_CODE":"FBUN-MVP-WEB-VIRGIN-35-24-20", "ONNET_TEXT_ALLOWANCE":0.0, "VOICE_ALLOWANCE":45000.0, "MMS_ALLOWANCE":0.0, "ONNET_ALLOWANCE":0.0]

【问题讨论】:

    标签: groovy


    【解决方案1】:

    现在 name1 的数据类型从 Varchar2(35) 更改为 number(10) ... 1000000959 等值也显示为 1.000000959E9,这有什么不同吗?

    是的,世界上的所有差异。这意味着您正在将 Double(很可能)转换为 String,并且由于字符串 "1000000959" 不等于 "1.000000959E9",因此您不会得到匹配项。

    不确定哪些位是双精度位,哪些位是字符串......也许你可以用一个实际的例子来扩展?

    此外,您的注入方法可以替换为:

    def result = tariffRecMap.subMap( recomendationOffers )
    

    【讨论】:

    • 嗨蒂姆,感谢您的回复。这适用于 1.5.6 版本吗?还是我应该使用一些转换为字符串?
    • @user3433227 您是否更改了用户名? subMap 去过since groovy 1.0 apparently。我不确定你有什么,或者你需要什么,因为这个问题没有任何类似双打的东西,这只是一个工作示例
    • 嗨蒂姆,我无法访问我以前的帐户 :-( 所以必须创建一个新帐户。我会从头开始尝试,如果我的尝试不成功,我会回复你。干杯
    • 嗨蒂姆,我如何在 groovy 中将 1.000000959E9 转换为 1000000959?也许我会用我的价值观编辑我的问题......
    • 嗨蒂姆,用原始值编辑了问题,请看一下
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    • 2017-08-08
    • 2022-08-04
    • 2017-08-03
    • 1970-01-01
    相关资源
    最近更新 更多