Как я преобразовываю Дважды [] для удвоения []?

Зависит от Вашего поставщика базы данных. MySQL имеет concat_ws. SQL Server MS ожидает, что Вы сделаете это в своем клиентском приложении.

Обновление: Вы могли также сделать это во внешней процедуре или UDF, возможно, при помощи курсора или обращающегося кода CLR.

63
задан Lahiru Ashan 28 November 2016 в 09:15
поделиться

6 ответов

К сожалению, вам нужно будет перебрать весь список и распаковать Double , если вы хотите преобразовать его в double [] .

] Что касается производительности, некоторое время связано с упаковкой и распаковкой примитивов в Java. Если набор достаточно мал, вы не увидите никаких проблем с производительностью.

33
ответ дан 24 November 2019 в 16:08
поделиться

Мне нечего добавить к настоящему вопросу, кроме того, что сказали jjnguy и Эрик Кослоу.

Но небольшое примечание: вы упомянули преобразование массива Object в массив Double. Следующее НЕ будет работать:

Object[] oa=new Object[3];
oa[0]=new Double("1.0");
oa[1]=new Double("2.0");
oa[2]=new Double("3.0");
Double[] da=(Double[])oa;

Последняя строка вызовет исключение приведения класса. Несмотря на то, что каждый элемент в массиве действительно является Double, массив был создан как массив объектов, а не как массив Double, поэтому приведение недопустимо.

Object[] oa=new Object[3];
oa[0]=new Double("1.0");
oa[1]=new Double("2.0");
oa[2]=new Double("3.0");
Double[] da=(Double[])oa;

Последняя строка вызовет исключение приведения класса. Несмотря на то, что каждый элемент в массиве действительно является Double, массив был создан как массив объектов, а не как массив Double, поэтому приведение недопустимо.

Object[] oa=new Object[3];
oa[0]=new Double("1.0");
oa[1]=new Double("2.0");
oa[2]=new Double("3.0");
Double[] da=(Double[])oa;

Последняя строка вызовет исключение приведения класса. Несмотря на то, что каждый элемент в массиве действительно является Double, массив был создан как массив объектов, а не как массив Double, поэтому приведение недопустимо.

1
ответ дан 24 November 2019 в 16:08
поделиться

Вы можете использовать a для каждого цикла, чтобы создать временный массив того же размера, затем привести каждый отдельный элемент к удвоению, но он находится в массиве.

SO:

double[] tempArray = new double[data[columnIndex].length];
int i = 0;
for(Double d : (Double) data[columnIndex]) {
  tempArray[i] = (double) d;
  i++;
}

Пожалуйста, исправьте меня, если я здесь совершенно не прав.

7
ответ дан 24 November 2019 в 16:08
поделиться

Если вы хотите вернуть double [] , вам нужно будет создать новый двойной [] , заполнить его и вернуть.

Это может быть хорошим архитектурным решением. Во-первых, не имеет большого смысла преобразовывать Object [] в Double [] ; на самом деле это не массив Double , потому что в нем также могут быть Object . Во-вторых, если вы вернете массив напрямую, пользовательский код может изменить его и изменить внутреннюю структуру вашего объекта.

Основное влияние на производительность будет заключаться в возврате массива double [] ,

3
ответ дан 24 November 2019 в 16:08
поделиться

If you don't mind using a 3rd party library, commons-lang has the ArrayUtils type with various methods for manipulation.

Double[] doubles;
...
double[] d = ArrayUtils.toPrimitive(doubles);

There is also the complementary method

doubles = ArrayUtils.toObject(d);

Edit: To answer the rest of the question. There will be some overhead to doing this, but unless the array is really big you shouldn't worry about it. Test it first to see if it is a problem before refactoring.

Implementing the method you had actually asked about would give something like this.

double[] getDoubles(int columnIndex) {
    return ArrayUtils.toPrimitive(data[columnIndex]);
}
86
ответ дан 24 November 2019 в 16:08
поделиться

Я бы второй ArrayUtils ответьте и добавьте, что документация 1.5 autoboxing ( via ) как бы показывает, что нет встроенного способа:

Нет разрешенного преобразования из типа массива SC [] в массив типа TC [] если не разрешено преобразование кроме преобразования строки из SC в TC

0
ответ дан 24 November 2019 в 16:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: