【发布时间】:2018-03-20 15:33:01
【问题描述】:
我正在研究 Java 8 中的 Stream API,但遇到了一个问题。问题是我试图在以下代码中了解()->new StringBuilder 和StringBuilder::new 之间的区别:
Stream<String> stream = Stream.of(new String[]{"b", "a", "s", "i", "l",});
StringBuilder basil = stream.collect(StringBuilder::new, StringBuilder::append, StringBuilder::append);
System.out.println("basil");
和
Stream<String> stream = Stream.of(new String[]{"b", "a", "s", "i", "l",});
StringBuilder basil = stream.collect(()->new StringBuilder(), StringBuilder::append, StringBuilder::append);
System.out.println("basil");
什么时候应该使用第一种语法,什么时候应该选择第二种?
以及为什么上面的代码接受StringBuilder::append而不接受StringBuilder::reverse
【问题讨论】:
-
它们在功能上是等效的。第二个称为'method reference'。
-
两者是等价的。如果可能的话,我建议使用方法引用,因为它更紧凑并且在我看来更具可读性。这是基于意见的。
-
@Zabuza 它并不总是更紧凑。当写成方法引用时,私有静态方法通常更冗长。
-
是的,选择你认为在特定情况下更具可读性和适当性的任何内容。
-
它主要是“相同”的东西,如果你真的在乎,方法引用将创建一个更少的合成方法
标签: java java-8 java-stream