Преобразование типа списка <Integer>в массив String [] с использованием ссылки на метод - PullRequest
1 голос
/ 11 марта 2019

Я пытаюсь преобразовать список типа Integer в массив строк.Я хочу сделать это, используя ссылку на метод, переданную toArray (), как показано ниже, которая должна работать как-то, так как мой профессор CS показал это нам в классе.

     List<Integer> strawberry = IntStream.rangeClosed(1, 100)
             .boxed().collect(Collectors.toList());

     String[] plum = strawberry.toArray(String[]::new);

Однако я получил следующее сообщение об ошибке:

Исключение в потоке "main" java.lang.ArrayStoreException: arraycopy: несоответствие типов элементов: невозможно привести ни один из элементов java.lang.Object [] для типа целевого массива, java.lang.String в java.base / java.lang.System.arraycopy (собственный метод)

Как это можно исправить?

Я знаю, что есть более простые способы сделать это, но я хочу научиться правильно использовать этот метод.Благодаря.

Ответы [ 2 ]

3 голосов
/ 11 марта 2019

Вам необходимо сначала отобразить поток строк:

String[] plum = strawberry.stream()
            .map(String::valueOf)
            .toArray(String[]::new);

Но вы можете сделать оба за один шаг:

String[] plum = IntStream.rangeClosed(1, 100)
         .mapToObj(String::valueOf)
         .toArray(String[]::new);
2 голосов
/ 11 марта 2019

Один вам нужен и stream и valueOf из `String:

List<Integer> strawberry = IntStream.rangeClosed(1, 100)
        .boxed().collect(Collectors.toList());

String[] plum = strawberry.stream().map(String::valueOf).toArray(String[]::new);
...