【发布时间】:2021-11-21 14:19:06
【问题描述】:
我正在使用 DockerClient,我有一个图像集合,我需要删除所有图像,但不是最新的,所以我想按升序对集合进行排序,我有一个创建的字段,它是日期的数字表示为 1632912516 的字符串。
我尝试了下一个:
public void checkingTest() throws DockerException, InterruptedException {
try {
List<com.spotify.docker.client.messages.Image> sortedImages = getImages();
sortedImages.stream()
.filter(img -> !img.id().equals(sortedImages.get(sortedImages.size() - 1).id()))
.forEach(img -> {
try {
dockerClient.removeImage(img.id());
}
catch (DockerException e) {
e.printStackTrace();
}
catch (InterruptedException e) {
e.printStackTrace();
}
});
}
catch (DockerCertificateException e) {
e.printStackTrace();
}
}
private List<com.spotify.docker.client.messages.Image> getImages()
throws DockerCertificateException, DockerException, InterruptedException
{
final DockerClient dockerClient =
DefaultDockerClient.fromEnv().connectTimeoutMillis(TimeUnit.SECONDS.toMillis(3)).build();
return dockerClient.listImages()
.stream()
.filter(image -> image.labels() != null && image.labels().containsKey("image"))
.sorted((o1, o2) -> o2.created().compareTo(o1.created()))
.collect(
Collectors.toList());
}
但我看到,在getImages 方法中,集合没有排序,所以我认为我需要将创建的字段转换为不同的字符串来实现这一点。
有什么想法吗?
【问题讨论】:
-
我会在
image.labels() != null周围加上一对括号。 -
这是一个xy problem,因为您根本不需要排序,如this answer 所示。比较包含数字的字符串可以像
Integer.compare(Integer.parseInt(o2.created(), Integer.parseInt(o1.created()))一样完成,但这只有在字符串具有不同的小数位数时才会有所不同。
标签: java collections java-stream spotify-docker-client