原始数组上的Lambda

MG.*_*MG. 10 java lambda java-8

我试图将a转换double[]float[]使用Java 8 lambda演算.到目前为止,我刚刚创建了一个应该修改的玩具方法.试图找到转换原始数组的帮助.大多数情况下,是否有任何方法可以摆脱guava转换,因为转换为List和返回对于大型数组来说太重了.

import com.google.common.primitives.Floats;

public static float[] doubleToFloat(double[] vector) {
    Float[] f = Arrays.stream(vector).<Float>mapToObj(x -> (float) x).toArray(Float[]::new);
    return Floats.toArray(Arrays.asList(f));
}
Run Code Online (Sandbox Code Playgroud)

Mis*_*sha 7

没有专门的FloatStream,所以你想要的不是Streams API.

如果你想获得float(内存的一半double)的好处并仍然使用流,你将必须存储以ints编码的浮点数:

double[] doubles = new double[]{1.2, 3.5, 4};

int[] floatsAsInts = Arrays.stream(doubles)
     .mapToInt(d -> Float.floatToRawIntBits((float) d))
     .toArray();

Arrays.stream(floatsAsInts)
     .forEach(i -> System.out.println(Float.intBitsToFloat(i)));
Run Code Online (Sandbox Code Playgroud)

你必须有一个非常好的理由来折磨你自己.除非你打算在这个数组中存储一亿个数字,否则你最好只使用double [].