java - 基于正则表达式的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
解决方案
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。
推荐阅读
- python - 如何将字符串添加到空变量以生成长单词?
- java - CentOS 更新后,CentOS 7 上的 TomEE 与 Microsoft SQL Server 的 JDBC 连接失败
- r - 使用 SelectorGadget 抓取网页
- c# - LINQ to Entity 查询转换
- java - 对 Java、Groovy、Jython 和 Python 进行基准测试
- react-native - FlatList 没有在 react-native 中填充 100% 的高度
- r - 如何在美国地图上绘制坐标?
- java - java - 如何使用Java中的流比较和操作一个列表中的两个相邻元素?
- python - 根据排名为学生分配主题
- python - 具有单矩阵乘法的简单 tensorflow keras 模型不起作用