Каков наилучший способ преобразования объекта List <Long>в массив long [] в Java? - PullRequest
30 голосов
/ 30 мая 2011

Есть ли какой-нибудь служебный метод для преобразования списка числовых типов в массив примитивного типа? Другими словами, я ищу лучшее решение, чем это.

private long[] toArray(List<Long> values) {
    long[] result = new long[values.size()];
    int i = 0;
    for (Long l : values)
        result[i++] = l;
    return result;
}

Ответы [ 4 ]

44 голосов
/ 18 июня 2015

Начиная с Java 8, вы можете делать следующее:

long[] result = values.stream().mapToLong(l -> l).toArray();

Что здесь происходит?

  1. Мы конвертируем List<Long> в Stream<Long>.
  2. Мы звоним mapToLong, чтобы получить LongStream
    • Аргументом mapToLong является ToLongFunction, который имеет long в качестве типа результата.
    • Поскольку Java автоматически распаковывает Long в long, запись l -> l как лямбда-выражения работает. Long там преобразуется в long. Мы также могли бы быть более явными и использовать вместо этого Long::longValue.
  3. Мы звоним toArray, который возвращает long[]
28 голосов
/ 30 мая 2011

Google Guava : Longs.toArray (Коллекция)

long[] result = Longs.toArray(values);
13 голосов
/ 30 мая 2011

Использование ArrayUtils.toPrimitive(Long[] array) из Apache Commons .

Long[] l = values.toArray(new Long[values.size()]);
long[] l = ArrayUtils.toPrimitive(l);
1 голос
/ 30 мая 2011

Я не вспоминаю о каком-то родном методе, который будет это делать, но что не так с созданием собственного; -).

public class YasinUtilities {

    public static long[] toArray(Iterator<Long) values) { //Better choice would be Enumerator but easier is this way. 

      if(value == null) {
        //return null or throw exception 
      }

      long[] result = new long[values.size()];

      Long current = null;
      int i = 0;
      while(values.hasNext()) {

       current = values.next();

       if(current == null) {
         result[i++] = 0L; //or -1;
       } else {
         result[i++] = current.longValue();
       }
      }
   } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...