0

我想从数组列表中获取值,以便我可以绘制它们,但我无法将它们放入数组中。在这个循环中,我正在循环我的排序哈希图并尝试将值存储在一个数组中(不起作用)。

long v [] = null;

for(Map.Entry<String,NumberHolder> entry : entries)
{
       v = entry.getValue().singleValues;
}

这是我的 NumberHolder 课程

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

我最终想要一个填充单个值的数组,以便我可以绘制它。

编辑

这就是我现在所拥有的,Eclipse 给了我这个永无止境的错误建议,将我的数组转换为它在用于我的图表Object[]时给我带来了问题。dataset.addSeries

for(Map.Entry<String,NumberHolder> entry : entries)
{ 
   graphMaker(entry.getValue().occurrences,entry.getValue().singleValues.toArray());
}                                        


public static void graphMaker(int totalValues, Object[] objects)
{

    int bin = 1000;
    HistogramDataset dataset = new HistogramDataset();
    dataset.setType(HistogramType.RELATIVE_FREQUENCY);
    dataset.addSeries("Histogram",objects,bin, 0, 120000);
4

5 回答 5

1

您不能将 ArrayList 分配给这样的 Array。也许你可以使用toArray方法:

long v [] = null;

for(Map.Entry<String,NumberHolder> entry : entries)
{
   v = entry.getValue().singleValues.toArray(new long[0]);
}
于 2013-04-18T18:48:15.823 回答
0

尝试以下操作:

Set<Long> values = new HashSet<Long>();
Iterator<NumberHolder> it = entries.keySet().iterator();
while(it.hasNext()) {
    NumberHolder numberHolder = it.next();
    values.addAll(numberHolder.singleValues;
}
Long[] v1 = values.toArray();
// transform to primitive long array
long[] v = new long[v1.size()];
for(int i = 0; i < v1.size(); i++) {
    v[i] = v1[i];
}
于 2013-04-18T19:04:02.217 回答
0

你不能直接这样做,因为long不等于Long

您可以使用Apache Commons Lang 库。有一个名为的类ArrayUtils有一个名为toPrimitive的函数。

如果您使用该功能,您可以执行以下操作:

for(Map.Entry<String,NumberHolder> entry : entries)
{
   v = ArrayUtils.toPrimitive(entry.getValue().singleValues.toArray(new Long[0]));
}

或者,如果您不想使用该库,可以执行以下操作:

for(Map.Entry<String,NumberHolder> entry : entries)
{
   v = new long[entry.getValue().singleValues.size()];
   for (int i=0; i<v.length; i++) {
       v[i]=entry.getValue().singleValues.get(i);
   }
}
于 2013-04-18T18:56:54.610 回答
0

很简单:

final ArrayList<Long> t = entry.getValue().singleValues;
v = new long[t.size()];
for (int i = 0; i < v.length; ++i) v[i] = t.get[i];

编辑:原始类型的固定处理

于 2013-04-18T18:48:03.927 回答
0
v = entry.getValue().singleValues.toArray(new long[0]);
于 2013-04-18T18:53:11.530 回答