将object[][]转换为ArrayList<Object[]>

5

我想在此之前已经有人问过/回答了几次这个问题。但是我没有找到我需要的确切答案,所以我再次发布它:

我正在尝试做这样的事情:

float[][] fa2 = {{7,2}, {5,4}, {9,6}, {4,7}, {8,1}, {2,3}};
ArrayList<Float[]> AF = new ArrayList<Float[]>();
AF = Arrays.asList(fa2);

但是它出现了一个错误:
Type mismatch: cannot convert from List<float[]> to ArrayList<Float[]>

我理解错误的原因,但在Java中进行转换最方便的方法是什么?

这是我能想到的最简单的方法。是否有更好/更方便的方法?

float[][] fa2 = {{7,2}, {5,4}, {9,6}, {4,7}, {8,1}, {2,3}};
ArrayList<Float[]> AF = new ArrayList<Float[]>(fa2.length);
for (float[] fa : fa2) {
    //initialize Float[]
    Float[] Fa = new Float[fa.length];
    //copy element of float[] to Float[]
    int i = 0;
    for (float f : fa) {
        Fa[i++] = Float.valueOf(f);
    }
    //add Float[] element to ArrayList<Float[]>
    AF.add(Fa);
}

1
我建议您使用double而不是float,因为它的精度非常低。此外,如果可以避免使用Float[]Double[],最好不要使用,因为它们非常低效。 - Peter Lawrey
是的,最终必须转换为double类型。因为Double是默认类型转换,必须为每个元素进行类型转换。谢谢! - somnathchakrabarti
5个回答

6

当你从 float[] 转换成 Float[] 时,你需要手动完成:

float[][] fa2 = {{7,2}, {5,4}, {9,6}, {4,7}, {8,1}, {2,3}};
ArrayList<Float[]> AF = new ArrayList<Float[]>();
for(float[] fa: fa2) {
    Float[] temp = new Float[fa.length];
    for (int i = 0; i < temp.length; i++) {
        temp[i] = fa[i];
    }
    AF.add(temp);
}

或者你可以一路使用 float[]

List<float[]> AF = Arrays.asList(fa2);

但是对于 AF.add(fa) 部分,会出现类型不匹配的问题,不是吗? - somnathchakrabarti
它是这样的吗?https://dev59.com/_nRB5IYBdhLWcg3wxZ7Y - Jonas N
奇怪!每天都有新的学习。这是哪个Java版本? - Jonas N
1
它报错了:类型ArrayList<Float[]>中的方法add(Float[])不适用于参数(float[])。 - somnathchakrabarti
加油,Aleksander,添加内循环和获取现金 :) - Jonas N
显示剩余2条评论

2

这对我有效:

float[][] fa2 = {{7f,2f}, {5f,4f}, {9f,6f}, {4f,7f}, {8f,1f}, {2f,3f}};
List<float[]> AF = Arrays.asList(fa2); 

编辑:如果出于某种原因,您必须混合使用float[]和Float[],请使用Apache Commons ArrayUtils.toObject

说明:如果您需要将一个基本类型的数组转换为其对应的包装类型数组,可以使用Apache Commons中提供的toObject方法。
float[][] fa2 = {{7f,2f}, {5f,4f}, {9f,6f}, {4f,7f}, {8f,1f}, {2f,3f}};
List<Float[]> AF = new ArrayList(fa2.length);
for (float[] fa : fa2) {
  AF.add(ArrayUtils.toObject(fa));
}

我需要一个 ArrayList<Float[]>,问题是将其转换为 Float[] 类型。 - somnathchakrabarti
编辑了代码示例,用于将float[]转换为Float[](这似乎是问题的要点) - HiJon89

1

你可以用另一种方式来做这件事:

    float[][] fa2 = {{7,2}, {5,4}, {9,6}, {4,7}, {8,1}, {2,3}};

   ArrayList<float[]> AF = new ArrayList<float[]>((Collection<float[]>)Arrays.asList(fa2))

我忘记添加转换.. 已经修复了。


1
这是我从那个里面得到的:构造函数ArrayList<Float[]>(List<float[]>)未定义。为什么它会起作用呢? - Martin Braun
它报错了:构造函数ArrayList<Float[]>(List<float[]>)未定义。 - somnathchakrabarti

0
你可以像这样做,不需要转换:
Float[][] test = {{2f,3f},{3f,4f}};

允许将Java原生类型转换为对象的概念称为自动装箱,这里正在使用它。但是,为了使其工作,您必须明确说明数字是浮点数或使用(float)进行强制转换。

那有什么问题吗?正如其他人指出的那样,他仍然可以使用Arrays.asList(...)。我只是指出需要更改的代码部分。应该能够期望一点自己的工作,不是吗? - Martin Braun
这不是我给你的负评,只是想指出你的回答并不是很有帮助。 - nkr
没问题。但是在我看来,他自己修复已经足够了。 - Martin Braun
1
仅供澄清:有时您无法控制从库中获取的数据类型。因此,您必须使用 float[] 进行操作。 - nkr

0

尝试

    float[][] fa2 = {{7,2}, {5,4}, {9,6}, {4,7}, {8,1}, {2,3}};
    List<float[]> af = Arrays.asList(fa2);

或者

Float[][] fa2 = {{7f,2f}, {5f,4f}, {9f,6f}, {4f,7f}, {8f,1f}, {2f,3f}};
List<Float[]> af = Arrays.asList(fa2);

1
请注意,您不必初始化af。这样做会在您在下一行将af设置为新列表时导致更多的垃圾回收。 - jco.owens
当然,我只是从问题中复制粘贴了代码,会修正我的答案。 - Evgeniy Dorofeev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接