自行车[] :: new的等效项是什么

时间:2019-10-08 22:59:27

标签: java lambda java-8 method-reference

下面的代码中有一条语句:.toArray(Bicycle [] :: new)。等于该语句的Lambda是多少?

我检查了toArray接收到IntFunction的实现。如果我理解正确,那么IntFunction是一个接口函数,该接口函数具有一个apply方法,该方法可以接收一个int并返回Bicycle []。我不知道尝试装载等效的Lambda会收到什么int。

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 + "]";
    }
}

有人可以帮我理解吗?

谢谢

1 个答案:

答案 0 :(得分:1)

<A> A[] toArray​(IntFunction<A[]> generator)文档中的API注释

  

生成器函数接受一个整数,它是大小   所需的数组,然后生成所需大小的数组

也等同于Bergi在评论中指出的内容:

.toArray(size -> new Bicycle[size])