Groovy: как отсортировать строковый массив текста чисел по последней цифре

#groovy

#groovy

Вопрос:

У меня есть такой массив:

     def arr = [ 
      "v3.1.20161004.0",
      "v3.1.20161004.1",
      "v3.1.20161004.10",
      "v3.1.20161004.11",
      "v3.1.20161004.2",
      "v3.1.20161004.3",
      "v3.1.20161004.30",
    ]
  

Мне нужно получить это:

     def arr = [ 
      "v3.1.20161004.0",
      "v3.1.20161004.1",
      "v3.1.20161004.2",
      "v3.1.20161004.3",
      "v3.1.20161004.10",
      "v3.1.20161004.11",
      "v3.1.20161004.30",
    ]
  

Как отсортировать его по последнему номеру ‘.x’?

Ответ №1:

Вы можете маркировать каждую строку . , а затем использовать последний элемент как целое число и сортировать по этому (передавая false , чтобы вернуть новый список)

 def newArray = arr.sort(false) { it.tokenize('.')[-1] as Integer }
  

Комментарии:

1. Спасибо! Это великолепное решение!

Ответ №2:

При сортировке массива вы можете определить закрытие сортировки. В этом случае вы можете разделить на точки и отсортировать с помощью оператора spaceship:

 arr.sort { a, b -> a.tokenize('.').last().toInteger() <=> b.tokenize('.').last().toInteger() }
  

Комментарии:

1. Спасибо за быстрый ответ, для меня это полезно.