【发布时间】:2021-03-16 15:11:13
【问题描述】:
我想从Iterable<Component> components 中排序版本。 Нow 当我在控制台中打印时,它会显示以下结果:
artifact 1.0.1
artifact 1.0.10
artifact 1.0.11
artifact 1.0.12
artifcat 1.0.2
artifcat 1.0.3
artifcat 1.0.4
这是我的代码
import org.sonatype.nexus.repository.storage.Component
import org.sonatype.nexus.repository.storage.Query
import org.sonatype.nexus.repository.storage.StorageFacet
def repoName = "artifact"
log.info("delete components for repository: " + repoName)
def repo = repository.repositoryManager.get(repoName)
def tx = repo.facet(StorageFacet).txSupplier().get()
try {
tx.begin()
Iterable<Component> components = tx.findComponents(Query.builder()
.where('version < ').param('1.1.0')
.build(), [repo])
tx.commit()
for(Component c : components) {
log.info("Name " + c.name() + " Version" + c.version())
}
} catch (Exception e) {
log.warn("Transaction failed {}", e.toString())
tx.rollback()
} finally {
tx.close()
}
【问题讨论】:
-
有些场景没有在您的示例输出中表示,以确定要求是什么。
components.sort {it.version()}是否产生所需的订单? -
您的标题显示为 数字字符串排序,但您的输出显示
1.0.2coming after1.0.11这表明您的要求可能是 alpha 排序。 -
"它从哪里来的" - 在 Groovy 中,如果闭包没有声明参数列表,则闭包将接受 1 个可选参数,名为
it。{ it.version() }、{ it -> it.version() }和{ comp -> comp.version() }在功能上是等效的。 -
"components = components.sort { it.size() }" - 这是有效的 Groovy,如果
components中的所有元素都有一个名为size不接受任何参数。 -
我以为你想按版本排序,所以我建议
components = components.sort { it.version() }。