Groovy 向下舍入所有数组小数位和 return 唯一数字计数?
Groovy to round all array decimal places down and return unique number count?
感谢您的帮助!
我的目标是让我的列表成为 [3, 3, 4]
,然后计算其中的唯一值。谁能指出我这样做的正确方向?
我的脚本使用 JSON 并将所有 F4211_LNID 值放入列表中。 [3.1, 3.9, 4]
。我现在需要将所有小数点四舍五入。
我不确定它是否可行,但我正在尝试使用 Math.floor(intListItems)
来向下舍入我的数组值。当我尝试这样做时,我收到以下错误:Exception No signature of method: static java.lang.Math.floor() is applicable for argument types: (ArrayList) values: [[3.1, 3.9, 4]] Possible solutions: floor(double), log(double), find(), macro(groovy.lang.Closure), acos(double), cos(double)
我在错误中看到了我的简化列表,但我无法将其向下舍入,也不确定错误的含义。
(已更新)我的工作 Groovy
// Read Input Values
String aInputJson = aInputMap.InputJson ?: "{}"
// Initialize Output Values
def intListItems = []
def uniqueCount = 0
// Parse JSON
def json = new JsonSlurper().parseText( aInputJson )
// Determine Row Numbers
def rowset = json?.fs_DATABROWSE_F4211?.data?.gridData?.rowset
intListItems = rowset.collect{ Math.floor(it.F4211_LNID) }
intListItems.unique()
uniqueCount = intListItems.size()
JSON我在用
{
"fs_DATABROWSE_F4211": {
"title": "Data Browser - F4211 [Sales Order Detail File]",
"data": {
"gridData": {
"id": 58,
"fullGridId": "58",
"rowset": [
{
"F4211_LNTY": "S",
"F4211_CPNT": 0,
"F4211_MCU": " 114000",
"F4211_DSC2": "NAS133N3EK166",
"F4211_NXTR": "580",
"F4211_LNID": 3.1,
"F4211_DOCO": 2845436
},
{
"F4211_LNTY": "S",
"F4211_CPNT": 0,
"F4211_MCU": " 114000",
"F4211_DSC2": "NAS133N3EK166",
"F4211_NXTR": "580",
"F4211_LNID": 3.9,
"F4211_DOCO": 2845436
},
{
"F4211_LNTY": "S",
"F4211_CPNT": 0,
"F4211_MCU": " 114000",
"F4211_DSC2": "NAS133N3EK166",
"F4211_NXTR": "580",
"F4211_LNID": 4,
"F4211_DOCO": 2845436
}
],
"summary": {
"records": 1,
"moreRecords": false
}
}
},
"errors": [],
"warnings": []
},
"currentApp": "DATABROWSE_F4211",
"timeStamp": "2000-06-01:09.42.02",
"sysErrors": []
}
您收到错误 Exception No signature of method: static java.lang.Math.floor() is applicable for argument types: (ArrayList)
,因为 Math.floor()
没有接受列表作为参数的版本。
相反,您需要对列表中的每个项目调用 Math.floor()
。最简单的方法是在您已经在进行的 collect { }
调用中。
def flooredList = rowset.collect { Math.floor(it.F4211_LNID) }
assert flooredList == [3.0, 3.0, 4.0]
感谢您的帮助!
我的目标是让我的列表成为 [3, 3, 4]
,然后计算其中的唯一值。谁能指出我这样做的正确方向?
我的脚本使用 JSON 并将所有 F4211_LNID 值放入列表中。 [3.1, 3.9, 4]
。我现在需要将所有小数点四舍五入。
我不确定它是否可行,但我正在尝试使用 Math.floor(intListItems)
来向下舍入我的数组值。当我尝试这样做时,我收到以下错误:Exception No signature of method: static java.lang.Math.floor() is applicable for argument types: (ArrayList) values: [[3.1, 3.9, 4]] Possible solutions: floor(double), log(double), find(), macro(groovy.lang.Closure), acos(double), cos(double)
我在错误中看到了我的简化列表,但我无法将其向下舍入,也不确定错误的含义。
(已更新)我的工作 Groovy
// Read Input Values
String aInputJson = aInputMap.InputJson ?: "{}"
// Initialize Output Values
def intListItems = []
def uniqueCount = 0
// Parse JSON
def json = new JsonSlurper().parseText( aInputJson )
// Determine Row Numbers
def rowset = json?.fs_DATABROWSE_F4211?.data?.gridData?.rowset
intListItems = rowset.collect{ Math.floor(it.F4211_LNID) }
intListItems.unique()
uniqueCount = intListItems.size()
JSON我在用
{
"fs_DATABROWSE_F4211": {
"title": "Data Browser - F4211 [Sales Order Detail File]",
"data": {
"gridData": {
"id": 58,
"fullGridId": "58",
"rowset": [
{
"F4211_LNTY": "S",
"F4211_CPNT": 0,
"F4211_MCU": " 114000",
"F4211_DSC2": "NAS133N3EK166",
"F4211_NXTR": "580",
"F4211_LNID": 3.1,
"F4211_DOCO": 2845436
},
{
"F4211_LNTY": "S",
"F4211_CPNT": 0,
"F4211_MCU": " 114000",
"F4211_DSC2": "NAS133N3EK166",
"F4211_NXTR": "580",
"F4211_LNID": 3.9,
"F4211_DOCO": 2845436
},
{
"F4211_LNTY": "S",
"F4211_CPNT": 0,
"F4211_MCU": " 114000",
"F4211_DSC2": "NAS133N3EK166",
"F4211_NXTR": "580",
"F4211_LNID": 4,
"F4211_DOCO": 2845436
}
],
"summary": {
"records": 1,
"moreRecords": false
}
}
},
"errors": [],
"warnings": []
},
"currentApp": "DATABROWSE_F4211",
"timeStamp": "2000-06-01:09.42.02",
"sysErrors": []
}
您收到错误 Exception No signature of method: static java.lang.Math.floor() is applicable for argument types: (ArrayList)
,因为 Math.floor()
没有接受列表作为参数的版本。
相反,您需要对列表中的每个项目调用 Math.floor()
。最简单的方法是在您已经在进行的 collect { }
调用中。
def flooredList = rowset.collect { Math.floor(it.F4211_LNID) }
assert flooredList == [3.0, 3.0, 4.0]