使用Java 8将int数组转换为长数组?

时间:2016-06-17 13:13:22

标签: java lambda java-8 java-stream

我尝试了几种不成功的方法。

1this.tileUpdateTimeslong[]other.tileUpdateTimes

int[]

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:19)

您需要使用mapToLong操作。

int[] intArray = {1, 2, 3};
long[] longArray = Arrays.stream(intArray).mapToLong(i -> i).toArray();

或者,正如Holger指出的那样,在这种情况下,您可以直接使用asLongStream()

int[] intArray = {1, 2, 3};
long[] longArray = Arrays.stream(intArray).asLongStream().toArray();

基本流上的map方法返回相同基元类型的流。在这种情况下,IntStream.map仍会返回IntStream

使用

转换为long
.map(item -> ((long) item))

实际上会使代码无法编译,因为IntStream.map中使用的映射器预计会返回intyou need an explicit cast to convert from the new casted long to int

使用.mapToLong(i -> i),希望映射器自动返回longint iis promotedlong,因此您不需要演员。

答案 1 :(得分:3)

此代码段对我编译很好并返回预期结果:

    int[] iarr = new int[] { 1, 2, 3, 4, 5, 6 };
    long[] larr = Arrays.stream(iarr)
                        .mapToLong((i) -> (long) i)
                        .toArray();
    System.out.println(Arrays.toString(larr));