如何直接提供对可选列表的方法引用?
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);
我有 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);