我想从arraylist获取值,以便我可以绘制它们但我无法将它们放入数组中。在这个循环中,我循环遍历排序的hashmap并尝试将值存储在数组中(不起作用)。
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);
答案 0 :(得分:1)
您不能像这样将ArrayList分配给数组。也许你可以使用toArray方法:
long v [] = null;
for(Map.Entry<String,NumberHolder> entry : entries)
{
v = entry.getValue().singleValues.toArray(new long[0]);
}
答案 1 :(得分: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];
编辑:原始类型的固定处理
答案 2 :(得分:0)
v = entry.getValue().singleValues.toArray(new long[0]);
答案 3 :(得分:0)
您无法直接执行此操作,因为long
不等于Long
。
您可以使用Apache Commons Lang Library。有一个名为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);
}
}
答案 4 :(得分: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];
}