У меня есть следующий словарь ака MAP на Groovy.
list = [
[
name:ProductA-manifest-file.json,
path:ProductA,
properties: [
[
key:release,
value:RC1.0
],
[ key:PIPELINE_VERSION,
value:1.0.0.11
]
],
repo:some-generic-repo-local,
],
[
name:ProductA-manifest-file.json,
path:ProductA,
properties: [
[
key:release,
value:RC1.0
],
[ key:PIPELINE_VERSION,
value:1.0.0.75
]
],
repo:some-generic-repo-local,
],
[
name:ProductA-manifest-file.json,
path:ProductA,
properties: [
[
key:release,
value:RC1.0
],
[ key:PIPELINE_VERSION,
value:1.0.0.1104
]
],
repo:some-generic-repo-local,
],
[
more similar entries here containing
],
[
more similar entries here
]
]
Я пытаюсь отсортировать эту карту в соотв. ключ свойств = значение PIPELINE_VERSION в формате x.x.x.x , т. е. набор из 4 цифр регистр.
Я попробовал следующую команду, но она не дает мне запись, которая содержит 1.0.0.1104 как PIPELINE_VERSION. Это дает мне 1.0.0.75 (что похоже на сортировку строкового типа.
// Sort the list entries acc. to pipeline version
def sortedList = list.sort { it.properties.PIPELINE_VERSION.value }
println "###### sortedList" + sortedList
println "\n^^^^\n"
println sortedList.last() // this should return me the entry which contains 1.0.0.1104 but I'm getting 1.0.0.75
}
Также попытался использовать .toInteger () как def sortedList = list.sort { it.properties.PIPELINE_VERSION.toInteger().value }
, но это не сработало, выдав ошибку.
17:07:22 Caught: groovy.lang.MissingMethodException: No signature of method: java.util.ArrayList.toInteger() is applicable for argument types: () values: []
17:07:22 Possible solutions: toUnique(), toUnique()
17:07:22 groovy.lang.MissingMethodException: No signature of method: java.util.ArrayList.toInteger() is applicable for argument types: () values: []
17:07:22 Possible solutions: toUnique(), toUnique()
Попробовал: list.sort {it.value.tokenize('.').last()}
, который тоже ничего не сделал.
Меньший пример будет:
map = ['a':'1.0.0.11', d:'1.0.0.85', 'b':'1.0.0.1104', 'c':"1.0.0.75"]
println " before sorting : " + map
//map = map.sort {it.value } // this doesn't work if the value is not a pure number format aka x.x.x. format ok lets try the following
map = map.sort {it.value.tokenize('.').last()} // cool that didn't work either
println " after sorting : " + map
Вопросы:
- Как я могу получить запись, которая имеет наибольшее значение PIPELINE_VERSION?
- Как получить запись индекса N-го массива, которая содержит самое высокое значение PIPELINE_VERSOIN в своем значении.
- Как обращаться с N нет. набора разрядов? то есть 1.0.0 или 1.2 или 1.0.0.12 или 1.4.1.9.255