Что эквивалентно для Bicycle [] :: new - PullRequest
1 голос
/ 09 октября 2019

В приведенном ниже коде есть такое утверждение: .toArray (Bicycle [] :: new). Что было бы лямбда-эквивалентом этому утверждению?

Я проверил, что toArray получает реализацию IntFunction. Если я правильно понял, IntFunction - это интерфейсный функционал, у которого есть метод apply, который может получить int и вернуть Bicycle []. Я не знаю, что это за 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 Ответ

1 голос
/ 09 октября 2019

Примечание API из документации <A> A[] toArray​(IntFunction<A[]> generator)

Функция генератора принимает целое число , которое является размером требуемого массива,и создает массив желаемого размера .

, что эквивалентно тому, что Берги также указал в комментариях:

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