gpt4 book ai didi

java - Java中 float 组列表到 float 组的列表

转载 作者:行者123 更新时间:2023-11-29 04:49:22 25 4
gpt4 key购买 nike

我正在寻找一种优雅的方式来转换 List<List<float[]>>只是float[]通过展平。我以为这会是一件轻而易举的事,但显然我错了。我无法使用 Java 8 或外部库来解决问题。我也不知道内部列表和数组的大小,它们不一定具有相同的大小。

这就是我所拥有的,我认为对于这样一个简单的任务来说它太复杂了:

private float[] toFloatBuffer(List<List<float[]>> buffers) {
//First: creating a new list to store the Float values
List<Float> mergedList = new ArrayList<>();
//Adding the float values to the mergedList
for(List<float[]> secondBuffer : buffers) {
for(float[] b : secondBuffer) {
for(float f : b) {
mergedList.add(f);
}
}
}
//Creating the final buffer with the size of mergedList
float[] merged = new float[mergedList.size()];
//This doesn't work for some odd reason...
//float[] merged = mergedList.toArray();
int i = 0;
//Adding the values of mergedList to merged
for(float f : mergedList) {
merged[i++] = f;
}
return merged;
}

编辑:出于某些充分的理由,我忘了说外部 List 是一个 LinkedList。也许知道这一点很重要。

最佳答案

这就是我的做法,虽然我不确定它是否更漂亮,但它应该更有效,尤其是因为它不会创建任何 Float对象。

public static float[] flatten(List<List<float[]>> lists) {
// get the total size.
int size = 0;
for (List<float[]> list : lists)
for (float[] floats : list)
size += floats.length;
// create an array of the right size.
float[] ret = new float[size];
int i = 0;
for (List<float[]> list : lists)
for (float[] floats : list) {
// bulk copy the array
System.arraycopy(floats, 0, ret, i, floats.length);
i += floats.length;
}
return ret;
}

这会创建一些迭代器,但是 Escape Analysis 可能会将它们放在堆栈上以避免垃圾。

下面只创建一个对象

public static float[] flatten(List<List<float[]>> lists) {
int size = 0;
for (int i = 0; i < lists.size(); i++) {
List<float[]> list = lists.get(i);
for (int j = 0; j < list.size(); j++) {
float[] floats = list.get(j);
size += floats.length;
}
}
float[] ret = new float[size];
int pos = 0;
for (int i = 0; i < lists.size(); i++) {
List<float[]> list = lists.get(i);
for (int j = 0; j < list.size(); j++) {
float[] floats = list.get(j);
System.arraycopy(floats, 0, ret, pos, floats.length);
pos += floats.length;
}
}
return ret;
}

如果您创建一个 List<Float>您为每个元素至少创建一个对象。

关于java - Java中 float 组列表到 float 组的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35996293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com