我被告知要将带有参数化构造函数的lambda转换为方法引用

Aar*_*onF 5 java lambda java-8 method-reference

假设我有一个Gizmo带有构造函数的类,它接受一个String.假设我想将a转换List<String>为a List<Gizmo>.

我可能会写:

List<String> strings = new ArrayList<>();
List<Gizmo> gizmos = strings
        .stream()
        .map(str -> new Gizmo(str))
        .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

现在,问题是IntelliJ告诉我我可以用方法引用替换lambda.事实是,我很确定方法引用不能参数.

das*_*ght 10

我认为InteliJ意味着取代

.map(str -> new Gizmo(str))
Run Code Online (Sandbox Code Playgroud)

同

.map(Gizmo::new)
Run Code Online (Sandbox Code Playgroud)

这是一个构造函数引用.见详细说明这里.


Ous*_* D. 5

现在,问题是IntelliJ告诉我可以用方法引用替换lambda。

它只是意味着您可以更改此:

.map(str -> new Gizmo(str))
Run Code Online (Sandbox Code Playgroud)

对此:

.map(Gizmo::new)
Run Code Online (Sandbox Code Playgroud)

您可以阅读有关构造方法参考的更多信息。

  • 哇,我们使用相同的链接来解释构造函数参考!!! (3认同)
  • 真是巧合!^^。 (3认同)