Список файлов для массива в Java - PullRequest
0 голосов
/ 15 декабря 2018

Мне интересно, почему существует проблема, чтобы изменить Arraylist из File на массив.

public static void main(String[] args) {
    List<File> pl = new ArrayList<File>();
    pl.add(new File ("C:\\folder"));
    String[] k;
    k = pl.toArray(new String[pl.size()]);
    System.out.println(k);
}

В приведенном выше простом примере я получу:

Exception in thread "main" java.lang.ArrayStoreException
    at java.lang.System.arraycopy(Native Method)
    at java.util.ArrayList.toArray(Unknown Source)
    at Main.main(Main.java:25)

и второй вопрос: должен ли я передать размер Arraylist?Поскольку обе версии отлично работают с массивом строк:

k = pl.toArray(new String[pl.size()]);
k = pl.toArray(new String[] {});

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Вам не нужно конвертировать Path в String, если вы хотите отобразить List<Path> в массив.

Вот что вы могли бы написать (добавляю некоторые комментарии об изменениях):

public static void main(String[] args) {
    List<File> pl = new ArrayList<>(); // Diamond operator
    pl.add(new File ("C:\\folder"));
    File[] k = pl.toArray(new File[pl.size()]);
    k = pl.stream().toArray(File[]::new);  // equivalent to the previous line
    System.out.println(Arrays.toString(k)); // Array.toString is not overriden. So this is needed
}
0 голосов
/ 15 декабря 2018

У вас есть список File объектов, вы не можете просто поместить их в массив String, вам нужно как-то явно преобразовать их (например, вызвав File#getName()).Наиболее удобный способ сделать это, вероятно, с Stream:

k = p1.stream().map(File::getName).toArray(String[]::new);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...