Bicycle[]::new 的等价物是什么
What is the equivalent for Bicycle[]::new
在下面的代码中有这样一个语句:.toArray(Bicycle[]::new)。 Lambda 等同于此语句的是什么?
我检查过 toArray 接收了 IntFunction 的实现。如果我理解正确,IntFunction 是一个接口函数,它有一个可以接收一个 int 和 return 一个 Bicycle[] 的 apply 方法。我不知道它接收到的这个 int 是什么来尝试挂载 Lambda 等价物。
package br.com.testes;
import java.util.Arrays;
import java.util.List;
public class TesteMethodReference {
public static void main(String[] args) {
List<String> bikeBrands = Arrays.asList("Giant", "Scott", "Trek", "GT");
Bicycle[] bicycles = bikeBrands.stream()
.map(Bicycle::new) //the same .map((brand) -> new Bicycle(brand))
.toArray(Bicycle[]::new); //WHAT IS THE LAMBDA EQUIVALENT?
System.out.println(Arrays.deepToString(bicycles));
}
}
class Bicycle {
private String brand;
public Bicycle(String brand) {
this.brand = brand;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
@Override
public String toString() {
return "Bicycle [brand=" + brand + "]";
}
}
谁能帮我理解一下?
谢谢
<A> A[] toArray(IntFunction<A[]> generator)
文档中的 API 注释
The generator function takes an integer, which is the size
of the desired array, and produces an array of the desired size.
这相当于 Bergi 在评论中指出的内容:
.toArray(size -> new Bicycle[size])
在下面的代码中有这样一个语句:.toArray(Bicycle[]::new)。 Lambda 等同于此语句的是什么?
我检查过 toArray 接收了 IntFunction 的实现。如果我理解正确,IntFunction 是一个接口函数,它有一个可以接收一个 int 和 return 一个 Bicycle[] 的 apply 方法。我不知道它接收到的这个 int 是什么来尝试挂载 Lambda 等价物。
package br.com.testes;
import java.util.Arrays;
import java.util.List;
public class TesteMethodReference {
public static void main(String[] args) {
List<String> bikeBrands = Arrays.asList("Giant", "Scott", "Trek", "GT");
Bicycle[] bicycles = bikeBrands.stream()
.map(Bicycle::new) //the same .map((brand) -> new Bicycle(brand))
.toArray(Bicycle[]::new); //WHAT IS THE LAMBDA EQUIVALENT?
System.out.println(Arrays.deepToString(bicycles));
}
}
class Bicycle {
private String brand;
public Bicycle(String brand) {
this.brand = brand;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
@Override
public String toString() {
return "Bicycle [brand=" + brand + "]";
}
}
谁能帮我理解一下?
谢谢
<A> A[] toArray(IntFunction<A[]> generator)
The generator function takes an integer, which is the size of the desired array, and produces an array of the desired size.
这相当于 Bergi 在评论中指出的内容:
.toArray(size -> new Bicycle[size])