java - 从列表中删除元素(较短的版本)
问题描述
我做了这个代码
final List<Future<?>> list = _scheduledTasks.remove(clazz);
if (Objects.nonNull(list))
{
list.stream().filter(Objects::nonNull).forEach(s -> s.cancel(true));
}
如何使用 java 8 样式将其变为 1 行?
解决方案
在 Java 9+ 中,Optional
像这样使用:
Optional.ofNullable(_scheduledTasks.remove(clazz))
.stream() // Added in java 9
.flatMap(List::stream)
.filter(Objects::nonNull)
.forEach(s -> s.cancel(true));
// As "1 line"
Optional.ofNullable(_scheduledTasks.remove(clazz)).stream().flatMap(List::stream).filter(Objects::nonNull).forEach(s -> s.cancel(true));
在 Java 8 中,使用ifPresent()
. 有点不优雅。
Optional.ofNullable(_scheduledTasks.remove(clazz))
.ifPresent(x -> x.stream()
.filter(Objects::nonNull)
.forEach(s -> s.cancel(true)));
// As "1 line"
Optional.ofNullable(_scheduledTasks.remove(clazz)).ifPresent(x -> x.stream().filter(Objects::nonNull).forEach(s -> s.cancel(true)));
推荐阅读
- javascript - 如何输出产品 ID、价格和数量的数组
- batch-file - 使用变量前缀创建文件夹的批处理文件
- gitlab - Jekyll 在 GitLab 上构建中断,捆绑程序问题
- ios - 自定义单元格类作为参数传入时不会调用 willDisplay
- ruby-on-rails - 自定义运行命令?- Azure 应用服务上的 Rails 应用
- python - 获取 python docker 容器与 redis docker 容器交互
- verilog - 子模块未在 rtl 示意图中实现
- navigation-drawer - Sidedrawer 页面中的 Nativescript 5.1 Core JS TabView 不起作用
- python - 继承 - 使用类方法创建类的新实例的正确方法
- java - 如何将动态 json 转换为 java 类?