首页 > 解决方案 > 基于正则表达式的groovy过滤器唯一值

问题描述

groovy 初学者在这里我输入如下:

def imglist = [
    "21.02.0-RB-SOLUTION-20210216-0000-3617382",
    "21.02.0-RB-SOLUTION-20210215-0000-17f6931","21.02-RB-SOLUTION-20210212-1626-4267925",
    "20.08-RB-SOLUTION-20210215-1031-1920a41","20.02-RB-SOLUTION-20210212-2053-5a1d378"
    ].sort().reverse(true)
for (String  solution : imglist) {

    println(solution)

}

打印我

21.02.0-RB-SOLUTION-20210216-0000-3617382
21.02.0-RB-SOLUTION-20210215-0000-17f6931
21.02-RB-SOLUTION-20210212-1626-4267925
20.08-RB-SOLUTION-20210215-1031-1920a41
20.02-RB-SOLUTION-20210212-2053-5a1d378

如您所见,我有两个值 21.02.0-RB-SOLUTION,我只需要保留一个最新日期为 20210216

标签: javagroovyjenkins-groovy

解决方案


groovy 中的列表上有一种unique方法可能适用于此处。tokenize您可以根据数据的形状使用正则表达式或仅使用普通表达式:

[
  "21.02.0-RB-SOLUTION-20210216-0000-3617382",
  "21.02.0-RB-SOLUTION-20210215-0000-17f6931",
  "21.02-RB-SOLUTION-20210212-1626-4267925",
  "20.08-RB-SOLUTION-20210215-1031-1920a41",
  "20.02-RB-SOLUTION-20210212-2053-5a1d378"
].sort()
 .reverse()
 .unique { a, b -> 
   a.tokenize('-').take(3).join() <=> b.tokenize('-').take(3).join()
 }.each { 
  println it
 }

打印:

─➤ groovy solution.groovy
21.02.0-RB-SOLUTION-20210216-0000-3617382
21.02-RB-SOLUTION-20210212-1626-4267925
20.08-RB-SOLUTION-20210215-1031-1920a41
20.02-RB-SOLUTION-20210212-2053-5a1d378

语法是<=>groovy spaceship 运算符,根据两个项目的比较方式返回 -1、0 或 1。


推荐阅读