Как преобразовать список ArrayListlist = new ArrayList<>() в массив long[]?

Подскажите пожалуйста самое оптимальное решение(короткое). Допустим дан список ArrayListlist = new ArrayList<>() и его надо преобразовать в массив long[]data.


Ответы (2 шт):

Автор решения: Алексей г
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Objects;

public class Main {
    public static void main(String[] args) {
        ArrayList<Long> list = new ArrayList<>();
        list.add(1L);
        list.add(2L);
        list.add(3L);
        list.add(4L);
        long[] longsPrimitive = list.stream()
                .filter(Objects::nonNull)
                .mapToLong(Long::longValue)
                .toArray();
        System.out.println(Arrays.toString(longsPrimitive));
    }
}
→ Ссылка
Автор решения: Andrew Bystrov

красиво через стримы:

List<Long> list = new ArrayList<>();
long[] data = list.stream()
        .mapToLong(Long::valueOf)
        .toArray();

единственное, что нужно помнить, что в исходном ArrayList<Long> могут содежатся null значения, и тогда эти null значения надо обходить ( иначе будет NullPointerException). Обойти null можно с помощью .filter :

long[] data = list.stream()
        .filter(Objecst::nonNull)
        .mapToLong(Long::valueOf)
        .toArray();
→ Ссылка