Не найдено подходящего метода для ArrayList <String>.toArray (String [] :: new) в операторе возврата - PullRequest
0 голосов
/ 09 октября 2018

Я работаю на сайте Codingbat , в частности, этот метод в AP-1

public String[] wordsWithout(String[] words, String target) {
  ArrayList<String> al = new ArrayList<>(Arrays.asList(words));
  al.removeIf(s -> s.equals(target));
  return al.toArray(new String[al.size()]);
}

Эта реализация работает, и это то, что в настоящее время отправлено, но когда я изменяю возвратоператор

return al.toArray(String[]::new);

, который должен работать, насколько мне известно, выдает следующую ошибку:

no suitable method found for toArray((size)->ne[...]size])
method java.util.Collection.<T>toArray(T[]) is not applicable
  (cannot infer type-variable(s) T
    (argument mismatch; Array is not a functional interface))
method java.util.List.<T>toArray(T[]) is not applicable
  (cannot infer type-variable(s) T
    (argument mismatch; Array is not a functional interface))
method java.util.AbstractCollection.<T>toArray(T[]) is not applicable
  (cannot infer type-variable(s) T
    (argument mismatch; Array is not a functional interface))
method java.util.ArrayList.<T>toArray(T[]) is not applicable
  (cannot infer type-variable(s) T
    (argument mismatch; Array is not a functional interface)) line:4

Кто-нибудь будет так любезен объяснить, почему это не работает?

1 Ответ

0 голосов
/ 09 октября 2018

Это:

al.toArray(String[]::new)

поддерживается только после java-11 через:

default <T> T[] toArray(IntFunction<T[]> generator) {
     return toArray(generator.apply(0));
}

Если вы хотите использовать ссылку на этот метод, сначала вам нужно будет stream(),как:

 al.stream().toArray(String[]::new)
...