如何直接提供对可选列表的方法引用?

How can I directly supply a method reference to an optional list?

我有 BufferedImage 个可为空的 List

List<BufferedImage> list = null; // or not null.

我发现我可以像这样刷新列表中的每个图像。

Optional.ofNullable(list)
    .ifPresent(l -> l.forEach(i -> i.flush())); // ok

而且我能做到。

Optional.ofNullable(list)
    .ifPresent(l -> l.forEach(BufferedImage::flush)); // ok

为什么当我尝试这样做时编译器会报错?

Optional.ofNullable(list)
    .ifPresent(List::forEach(BufferedImage::flush)); // not ok

A method reference (List::forEach) 不能接受参数,所以你不能组合它们。另一方面,您可以将方法引用作为参数传递给 "normal" 方法调用 (l.forEach(BufferedImage::flush)).

我不认为你能比倒数第二个选项做得更好。

使用空列表而不是空值会更方便。 Optional 让一切变得简单:

Optional.ofNullable(list)
        .orElseGet(Collections::emptyList)
        .forEach(BufferedImage::flush);