首页 > 解决方案 > 从列表中删除元素(较短的版本)

问题描述

我做了这个代码

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

解决方案


在 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)));

推荐阅读