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

Jin*_*won 0 java lambda java-8

我有一个可为空ListBufferedImage秒.

List<BufferedImage> list = null; // or not null.
Run Code Online (Sandbox Code Playgroud)

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

Optional.ofNullable(list)
    .ifPresent(l -> l.forEach(i -> i.flush())); // ok
Run Code Online (Sandbox Code Playgroud)

我可以做到这一点.

Optional.ofNullable(list)
    .ifPresent(l -> l.forEach(BufferedImage::flush)); // ok
Run Code Online (Sandbox Code Playgroud)

为什么编译器在我尝试这样做时会抱怨?

Optional.ofNullable(list)
    .ifPresent(List::forEach(BufferedImage::flush)); // not ok
Run Code Online (Sandbox Code Playgroud)

ass*_*ias 5

方法参照(List::forEach因此不能构成它们)不能采取的参数.另一方面,您可以将方法引用作为参数传递给"普通"方法call(l.forEach(BufferedImage::flush)).

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


Mis*_*sha 5

使用空列表而不是空值是不那么麻烦. Optional让它变得简单:

Optional.ofNullable(list)
        .orElseGet(Collections::emptyList)
        .forEach(BufferedImage::flush);
Run Code Online (Sandbox Code Playgroud)