java - 如何从流集合中删除最后一个元素(DockerClient)
问题描述
嗨,我有一个流集合,我按创建日期对其进行了排序,我需要从这个集合中删除所有元素,但最后一个元素要少:
这是我的代码:
List<com.spotify.docker.client.messages.Image> response = dockerClient.listImages()
.stream()
.filter(image -> image.labels() != null && image.labels().containsKey("wantedLabel"))
.sorted((o1, o2) -> o2.created().compareTo(o1.created()))
.collect(
Collectors.toList());
在这个列表中,我的元素按创建日期排序,我需要删除除最后一个元素之外的所有元素。
我试过类似的东西:
if (response.stream().iterator().hasNext()) {
response.remove(count);
count++;
}
但我想要更复杂的东西,谢谢!
解决方案
使用传统循环可以简单高效地解决此任务:
com.spotify.docker.client.messages.Image mostRecent = null;
for(var image: dockerClient.listImages()) {
if(image.labels() == null || !image.labels().containsKey("wantedLabel")) continue;
if(mostRecent == null) mostRecent = image;
else {
var toRemove = image;
if(toRemove.created().compareTo(mostRecent.created()) > 0) {
toRemove = mostRecent;
mostRecent = image;
}
dockerClient.removeImage(toRemove.id());
}
}
此循环遍历图像并在找到更新的匹配对象后立即删除图像,而无需额外的存储或排序。当循环完成时,除了最近的匹配图像之外的所有图像都已被删除,并且作为奖励,保留的最近对象保存在变量 中mostRecent
。
推荐阅读
- python - Efficient Progressive Sprinkles Augmentation in Tensorflow
- jquery - 有没有办法使用布局页面向 MVC 视图的主体添加样式
- ios - How to make 1 to 1 relationship in CoreData
- c# - 多选 Linq 查询
- micrometer - 千分尺 - 在度量名称中添加默认前缀
- wordpress - WordPress 自定义登录要求和使用身份验证挂钩的错误消息
- javascript - jQuery 3.2.1 与旧脚本不兼容
- react-native - 在 React Native 中使用 ActionCable 在标头中发送参数
- java - 如何克服错误 - “应用程序运行失败”/“HikariPool-1 - 从数据源获取连接时抛出错误”
- r - R中的填充地图+位置图