6

これは可能ですか?私はしばらくこれに苦労してきました。私はもともと最初にキャストしてからコンパイルできるようLong []に変換していましたが、キャストのエラーが発生しました。double []私は今立ち往生しています。

このコードでは、ハッシュマップのエントリを繰り返し処理しています。

 Object[] v = null;
 for(Map.Entry<String,NumberHolder> entry : entries)
 {
       v = entry.getValue().singleValues.toArray(); //need to get this into double []
 }

これが私のnumberHolderクラスです

private static class NumberHolder
{
    public int occurrences = 0;
    public ArrayList<Long> singleValues = new ArrayList<Long>();
}
4

3 に答える 3

7

非ジェネリックtoArrayは最適ではない可能性がありforます。代わりにループを使用することをお勧めします。

Long[] v = new Long[entry.getValue().singleValues.size()];
int i = 0;
for(Long v : entry.getValue().singleValues) {
  v[i++] = v;
}

ではなく、オブジェクトの配列をLong取得しましたObject。ただし、Long浮動小数点ではなく整数値です。キャストできるはずですが、根本的な問題の匂いがします。

配列を使用する代わりに直接変換することもできます。Long

double[] v = new double[entry.getValue().singleValues.size()];
int i = 0;
for(Long v : entry.getValue().singleValues) {
  v[i++] = v.doubleValue();
}

概念:ここで配列を変換しようとするのではなく、各要素を変換して結果を新しい配列に格納する必要があります。

于 2013-04-22T14:00:31.220 に答える
2

type の配列を に「変換」するには、 new を作成してtype の値を入力するObject[]必要があります。これは、おそらくループで、入力配列からそれぞれを個別にキャストすることによって取得されます。double[]double[]doubleObject

于 2013-04-22T14:01:14.637 に答える