如何将一个数组转换为另一种基本数据类型的数组

3

有人能简单地完成这段代码吗?

float[] floats = {...}; // create an array
// Now I want to create a new array of ints from the arrays floats
int[] ints = ????;

我知道我可以逐个元素地转换为新的数组。但是有更简单的方法吗?
谢谢

1
我认为你必须编写一个循环,而且令人疯狂的是Java中的“for ... in”结构如此脆弱,以至于在这种常见情况下甚至无法使用它。 - Pointy
理论上,您可以创建一个 java.lang.Number 数组,将整数添加到其中,并根据需要使用 .floatValue 和 .intValue 方法。 - Searles
2个回答

4
我相信对于将浮点数转换为整数的示例,你不能使用其他方法,而只能逐个转换每个元素。

我快速地在谷歌上搜索了一下,发现有人遇到了类似的问题,这更或多或少地证实了我的说法:

http://www.java-forums.org/advanced-java/11255-type-casting-array.html

我建议只单独转换元素。这是保证能够工作并且易于未来开发人员理解的方法。任何“一次性全部转换”的代码都可能在幕后执行相同操作。

Java不允许将数组类型强制转换为子类(例如,String[] sarray = (String[]) new Object[10];)。尝试这样做会导致运行时ClassCastException - Kevin Brock
好的,我知道了。我已经从我的回答中删除了不正确的陈述。 - Morinar
任何形式的“一次性全部强制转换”代码可能只是在幕后执行该操作而已。实际上,它可以使用本地SSE / AVX获得更高的性能,就像System.arraycopy()一样。奇怪的是,Java没有这样的方法。 - Aleksandr Dubinsky
我在Java中广泛搜索了有关数组转换的主题,以便将原始数组类型转换为字节,以便将它们转储到文件中。作为一名C程序员,我很震惊地意识到没有简单的方法可以在不使用for循环的情况下完成它。我找到的唯一替代方案是从ByteBuffer开始,然后将我的数组(例如float [])创建为ByteBuffer的视图,例如bb.asFloatBuffer - orodbhen

0

你不能直接这样做。根据创建和使用该数组的上下文,您可能需要考虑使用一个包装类的数组,其中您的setter接受一个float并getter返回一个int。

如果在您的情况下实际可行,这将是理想的,因为您可以隐藏客户端代码中的转换。


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